前提・実現したいこと
Pythonでデータの加工をしています。
当方Pythonは初心者です。
SQLのcase whenに相当する機能を実装中に以下のエラーメッセージが発生しました。
よい対応方法をご教授頂ければ幸いです。
■元データ(Pandas DataFrame)
label1 label2 label3
NaN XXX 1
NaN YYY 2
AAA ZZZ 3
BBB ZZZ 4
AAA XXX 5
NaN YYY 6
■加工後の期待結果
label1 label2 label3
NaN XXX 1
NaN YYY 2
AAA AAA 3
BBB BBB 4
AAA XXX 5
NaN YYY 6
■期待結果を得るためのSQL
create table df1 as
select label1,
case when label1 ^= "NaN" and label3 in (3, 4) then label1 else label2 end as label2,
label3
from df1
;
発生している問題・エラーメッセージ
#1 "'Series' object has no attribute 'query'", 'occurred at index 0'
#2 ValueError: Length of values does not match length of index
#3 "'int' object has no attribute 'isin'", 'occurred at index 0'
該当のソースコード
Python
1#1 2def if_else(x): 3 if x.query('label3 in ([3, 4])') and x.label1 != 'NaN': 4 label2 = label1 5 else: 6 label2 = label2 7 8df1 = df1.apply(lambda x: if_else(x), axis=1)
#2 df1['label2'] = np.where((df1['label3'].isin([3, 4]) & (df1['label1'] != 'NaN'), df1['label1'], df1['label2']))
#3 def if_else(x): if x.loc[(x.label3.isin([3, 4])) & (x.label1 != 'NaN')]: x.label2 = x.label1 else: x.label2 = x.label2 df1 = df1.apply(lambda x: if_else(x), axis=1)
試したこと
'#1, #2, #3のコードをそれぞれ試しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/09 06:07