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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5958閲覧

複数のデータフレームのデータを用いて欠測補完

ayaayaweapon

総合スコア11

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/30 06:32

前提・実現したいこと

欠測補完のプログラムを作成していました。
DF1['time']とWIND1['time']が同じであれば、WIND1['WindDir']に時間が同じDF1['time']で置換したかったのですが、以下のエラーが出現しました。

発生している問題・エラーメッセージ

エラーメッセージ `TypeError: ("'Series' object is not callable", 'occurred at index 0')`` ### 該当のソースコード DFNA=pd.DataFrame(df_na1) WIND=pd.DataFrame(data_1_WIND) DF1= DFNA.reset_index() WIND1= WIND.reset_index() def func(row): if row(DF1['time'])==row(WIND1['time']): row(DF1['WindDir']).fillna(row(WIND1['WindDir']),inplace=True) DF1['df'] = DF1.apply(func,axis=1)
### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

やりたいことはこういうことでしょうか。

Python

1import pandas as pd 2import numpy as np 3 4df1 = pd.DataFrame({'time':[1,np.nan,3]}) 5df2 = pd.DataFrame({'time':[4,5,6]}) 6 7def func(row): 8 v = row['time'] 9 if np.isnan(v): 10 v = df2.loc[row.name,'time'] 11 return v 12 13df1['time'] = df1.apply(func,axis=1) 14print(df1) 15""" 16 time 170 1.0 181 5.0 192 3.0 20"""

投稿2019/06/01 07:38

can110

総合スコア38266

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

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

ayaayaweapon

2019/06/03 03:22

回答ありがとうございます。こちらの説明不足ですみません。そのようなことであっております。いろいろ試行錯誤を重ねた結果、'time'をset_indexにし、level='time'が等しければ他のデータで埋めるという風にしようと考えました。そこで回答いただいたプログラムにて行ったところ、 if np.isnan(v): ^ SyntaxError: invalid syntax というエラーがかえってきました。
ayaayaweapon

2019/06/03 03:44

先ほどのエラーの件解決いたしました。 v=row[WIND1(['WindDir'],level=['quarter','time'])] "'DataFrame' object is not callable", 'occurred at index (1, 00:00:00, 2015-01-01 00:00:00)' こういったエラーがでたのですが、解決策を教えていただきたいです。
can110

2019/06/03 03:46

エラー発生したソースコードの詳細が不明ですが、WIND1(~)のようにDataFrameに対して関数呼び出し的な構文になっているように思います。
ayaayaweapon

2019/06/03 05:36

そうでした。解決しました! def func(row): v=row[WIND1['WindDir']] if np.isnan(v): v=DF1(row.name,'WindDir',level=['quarter','time']) return v WIND1['WindDir']= WIND1.apply(func,axis=1) としたところ、 The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all() こういったエラーがかえってきました。一つの値で複数のデータフレームを置換することは厳しいのでしょうか。お忙しい中申し訳ないですが回答くださると幸いです。
can110

2019/06/03 07:04

エラーはv=row[WIND1['WindDir']]で発生しているのではないでしょうか? おそらくvには複数の値が入っており、それにたいしてisnan判定していると提示エラーが発生します。 要は、「すべてnan」か「いずれかnan」か判定が曖昧であるという意味のエラーです。
ayaayaweapon

2019/06/03 07:18

確認し、修正したところ、解決できました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問