私はどこに問題があるのか分かりませんが、このコードは非常に簡単な例ではうまくいきましたが、実際のデータで作業を開始したときに問題が発生しました。私のパンダのデータフレームが「なし」タイプになっているのはなぜですか?
私は基本的に、様々なCSVファイルから特定のデータを抽出し、最終的には、単一のデータフレームにそれらを結合しようとしています。ただ
wavenames = ['W1_', 'W2_', 'W3_']
logs=['log1','log2','log3','log4']
for w in wavenames:
AllSynt = pd.DataFrame(index=range(6341), columns=['X']+logs)
AllSynt['X']=z # an array extracted from elsewhere
print AllSynt.head(3)
for f in files:
for l in logs:
if (f.startswith('Synthetic_'+w)) & (f.endswith(l+'.csv')):
df = pd.read_csv(path+f,delimiter=',')
AllSynt = pd.DataFrame(AllSynt)
AllSynt = AllSynt.merge(df,how='left',on='X')
AllSynt = AllSynt.rename(columns = {'Y':l}, inplace = True)
print '\n', AllSynt.head(5)
が、これは私にAttributeError: 'NoneType' object has no attribute 'head'
を与える(AllSyntは、ループの先頭にパンダのデータフレームであることを確認する前に、私は同じエラーを得た(:
コードの関連部分は以下の通りです。なぜAllSyntのデータフレームが永久None
になりつつある、それは何の属性)は「合併しない」があると言って
'rename'操作中に' inplace = True'を指定した場合、結果を変数に再割り当てする必要はありません。そのため、これらは 'None'値として返されます。 –
ありがとう、これは少し助けました(すべての値は 'NaN'ですが、少なくともデータフレームです)。しかし、私はまだ疑いがあります - 質問で言及されているように、名前の変更プロセスの前に、ループの始めに "None"という値がすでに現れました。それはなぜですか? – durbachit
これは、既に '' X''に対応する値だけをあらかじめ定義された配列で埋めている間に、あなたがすでに列名を設定していたからです。 'logs'(*は列名*を構成しました)にある要素はその下に値を持たなかったので、自然に' NaN 'で埋められました。 –