前提・実現したいこと
以前こちらでも質問させて頂いたコードで、
object型のa4という、0~14までの要素があるカラムで
12を1, 2, 12ではなく、12だけでフラグ立てをするために、
.split(',')で区切って、
その後、int型に変換する操作をしたいのですが、
以下のエラーが起きてしまいます。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-31-4a6116436e5e> in <module> 7 return 0 8 ----> 9 data['その他市販'] = data['a4'].apply(shampoo13) 10 11 #row→row.split(';') c:\users\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds) 4036 else: 4037 values = self.astype(object).values -> 4038 mapped = lib.map_infer(values, f, convert=convert_dtype) 4039 4040 if len(mapped) and isinstance(mapped[0], Series): pandas\_libs\lib.pyx in pandas._libs.lib.map_infer() <ipython-input-31-4a6116436e5e> in shampoo13(row) 1 def shampoo13 (row): ----> 2 data = row.split(';') 3 list_ = list(map(int, data)) 4 if 12 in list_: 5 return 1 AttributeError: 'float' object has no attribute 'split'
該当のソースコード
def shampoo13 (row): data = row.split(';') list_ = list(map(int, data)) if 12 in list_: return 1 else: return 0 data['その他市販'] = data['a4'].apply(shampoo13) #row→row.split(';')
*dataは元のデータです。
ちなみにdata['a4']は
Python
1print(data['a4'])
0 12 1 12 2 12 3 12 4 12 ... 2578478 NaN 2578479 NaN 2578480 NaN 2578481 NaN 2578482 NaN Name: a4, Length: 2578483, dtype: object
data['a4']だけ抜いたデータを作ったときは
動いていました。
何卒宜しくお願い致します。
data['a4']列の型と値を明確に確認できるよう
「data['その他市販'] = data['a4'].apply(shampoo13)」の手前に「print(data['a4'])」を追加して実行し
そのprint結果をそのまま提示ください。
can110さん
ありがとうございます。
質問を修正したので、
ご確認よろしくお願いいたします。
入力データに決まりがない場合、いろいろなデータを想定しないといけないのですが、たとえば
data = pd.DataFrame({'a4':['1;2','12', '', 'a;12', '12;a', pd.np.nan, None]})
の場合、data['その他市販'] = data['a4'].apply(shampoo13)
はどのような結果になるべきでしょうか?