質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

674閲覧

python関数の引数でpandas dataframeを指定した時、指定したdataframeによって条件分岐させたい

coffeebar

総合スコア140

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2022/05/13 01:48

前提・実現したいこと
初歩的な内容で恐縮です。調べるキーワードが見つけられず、質問させて頂きます。
python関数の引数でpandas dataframeを指定した時、指定したdataframeによって条件分岐させたい

発生している問題・エラーメッセージ
The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

該当のソースコード

#もちろんこれが実際のコードではありませんが、やりたい方向がこういう内容です。 def function_a(df): if df == train_df: a = 1 if df == test_df: a = 2 return a
function_a(train_df)

自分で調べたことや試したこと
if df == 'train_df':
と文字列にしてみても、ダメでした。
if df.iloc[0][2] == 1:
などとすれば出来ないことはないのですが、もっとスマートな書き方はありますか?

使っているツールのバージョンなど補足情報
Google Colaboratory上

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

python

1import pandas as pd 2import numpy as np 3 4train_df = pd.DataFrame({ 5 'col1': ['a', 'a', 'b', 'b', 'a'], 6 'col2': [1.0, 2.0, 3.0, np.nan, 5.0], 7 'col3': [1.0, 2.0, 3.0, 4.0, 5.0] 8 }, columns=['col1', 'col2', 'col3']) 9 10test_df = pd.DataFrame({ 11 'col1': ['b', 'b', 'a', 'a', 'b'], 12 'col2': [np.nan, 1.0, 2.0, 3.0, 4.0], 13 'col3': [5.0, 4.0, 3.0, 2.0, 1.0] 14 }, columns=['col1', 'col2', 'col3']) 15 16def function_a(df): 17 if df.equals(train_df): 18 a = 1 19 elif df.equals(test_df): 20 a = 2 21 else: 22 a = 0 23 return a 24 25if __name__ == '__main__': 26 df = train_df.copy() 27 print(function_a(df)) 28 29 df = test_df.copy() 30 print(function_a(df)) 31 32# 331 342

投稿2022/05/13 02:27

melian

総合スコア19809

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coffeebar

2022/05/13 07:44

頂いたコードそのものを Colaboratoryに載せて、きちんと動作確認できました。 しかし、自分のコードに組み込もうとすると、今度は別の 'Can only compare identically-labeled DataFrame objects' というエラーが出てしまいました。 あまりスマートさにこだわらずに、 def function_a(df, phase): if phase == 'train': a = 1 if phase == 'test': a = 2 return a function_a(train_df, 'train') と引数を増やすことで対応することにしました。 ご回答、ありがとうございました。
coffeebar

2022/05/13 08:01

追加情報ありがとうございました。melian様のコメント、大変勉強になりました。 質問を締めさせて頂きます。
guest

0

pandas.DataFrame.equalsでの判定を検討してみてください。

投稿2022/05/13 02:26

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coffeebar

2022/05/13 07:39

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問