以下のコードの結果として、展開されたコードが同じ列 (nutrition
以下) に整数とブール値を生成したため、エラーがどこに忍び寄るのか混乱しています。テストでは小さなデータでは発生しません。ここで何が起こる可能性がありますか?
LopNr
合計が 1 を超えていない月に、パンダはTrue
を 1 に変換しませんでしたか? なぜだめですか?いずれにせよ、この方法で最終結果を手動でオーバーライドしても安全ですか?
データには、関連する列が次のような行があります。
LopNr DIAGNOS INDATUMA
1 E12 E14 20050705
コードは次のとおりです。
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
all_treatments = list()
filelist = ['file1']
nutrition_codes = '|'.join(["D{}".format(i) for i in range(50, 54)] + ["E{}".format(i) for i in range(10, 15)] + ["E{}".format(i) for i in range(40, 47)] + ["E{}".format(i) for i in range(50, 69)])
for file in filelist:
filename = 'PATH/' + file +'.txt'
if file[0]=='o':
treatments = pd.read_table(filename,usecols=[0,8,10])
elif file[0]=='s':
treatments = pd.read_table(filename,usecols=[0,8,11])
else:
print "file should start with s or o, no?"
all_treatments.append(treatments)
all_treatments = pd.concat(all_treatments, ignore_index=True)
all_treatments['date'] = pd.to_datetime(all_treatments['INDATUMA'].astype(str), coerce=True)
all_treatments['year'] = all_treatments['date'].dt.year
all_treatments['month'] = all_treatments['date'].dt.month
all_treatments['nutrition'] = all_treatments.DIAGNOS.str.contains(nutrition_codes)
all_treatments = all_treatments.drop(['DIAGNOS','INDATUMA','date'], axis=1)
all_treatments = all_treatments.groupby(['LopNr','year','month']).sum().astype(int,copy=False,raise_on_error=False)
all_treatments.to_csv('PATH/treatments_monthly.csv')