前提・実現したいこと
python,pandasのdataframeに対して、map関数を適用させているのですが、
エラーが発生してしまうので、そのエラーが起こっている繰り返し番号を取得したいです。
発生している問題・エラーメッセージ
2018-10-07 18:00:00
2018-10-08 08:30:00
2018-10-08 10:00:00
2018-10-08 18:00:00
2018-10-09 08:30:00
2018-10-09 17:00:00
2018-10-10 11:00:00
Miss
Miss
Miss
nan
---> 28 mlist = list(datetimebef)
29 month = mlist[5:7]
30 month2 = ''.join(month)
TypeError: 'float' object is not iterable
該当のソースコード
def mapping(datetimebef): if datetimebef is np.nan or datetimebef == 'nan': print('Miss') return np.nan else: print(datetimebef) mlist = list(datetimebef) month = mlist[5:7] month2 = ''.join(month) month2 = int(month2) return month2 A= df['datetime'].map(mapping)
試したこと
floatはiterableじゃないと言われているので、エラーが起こっているデータを見たところ、datetimebefはnanと出力されていました。そこで、mapping内でdatetimebef == 'nan'としてみましたが、elseの方で処理されてしまっています。df['datetime']はpandasでcsvファイルを読み込んでいるので、ここに入ってあるデータを確認したいのですが10万行近くあるので目視では困難です。どうぞお願いいたします。
コードはインデントが判るようにしてください。
「コードの挿入」で入力してください。
print( df['datetime'][0:5])なりの実行結果(どんなデータであるか)を提示ください。
map関数で何を適用したいのか説明お願いします。
※自作関数の簡単な説明
>>can110様
基本的に2018-10-09 17:00:00のようなdatetime型変数が入っています
>> meg_様
コードで挿入しました。ありがとうございます。
df['datetime']の中に2020-00-00 18:00:00のような異常値(月が1~12の範囲外)にあるデータが存在しますので、これをNanに変更するために、NaN以外のデータから月の部分を抽出しようとしています。
datetime型であれば「2020-00-00 18:00:00」という異常値はそもそも含まれ得ないはずです。
dfの中身がよく分からないので、df生成部分のコードと、もしread_csvなりでファイルから読み込んているのであれば、現象が再現する最小限のファイル内容も提示ください。
すみません、type(df['datetime'])で確認したところ、
<class 'pandas.core.series.Series'>でした。
df = pd.read_csv('./test.csv')
で読み込んでおり、df['datetime']の中身は
2018-10-01 16:00:00
2018-10-01 18:00:00
2018-10-02 17:00:00
...
NaN
NaN
のような感じです。また、読み込んだままだと2050年とかのデータがあるので、これをNaNにするために、
df.loc[df['datetime'] > f'{pd.Timestamp.max:%Y%M%d}', 'datetime'] = pd.np.nan
という処理を行っています。
回答2件
あなたの回答
tips
プレビュー