2016-09-20 3 views
1

複数のCSVファイルを一緒に追加するにはどうすればいいですか?CSVファイルとパンダを組み合わせる方法(そして特定の列を追加する)

は、これまでのところ私が持っている:

import os 
import pandas as pd 
import glob 

os.chdir('C:\...') # path to folder where all CSVs are stored 
for f, i in zip(glob.glob('*.csv'), short_list): 
    df = pd.read_csv(f, header = None) 
    df.index = i * len(df) 
    dfs.append(df) 

all_data = pd.concat(dfs, ignore_index=True) 

これは、すべての特定の列を除いて、うまく動作します。 iは、all_dataの列Aに入れたいstringsのリストです。各列の各行ごとに1つの文字列。代わりに、多くの数値を返し、TypeError: Index(....) must be called witha collection of some kindを返します。

予想される出力:

str1 file1entry1 
str1 file1entry2 
str1 file1entry3 
str2 file2entry1 
str2 file2entry2 
str2 file2entry3 
short_list = ['str1', 'str2', 'str3']

、およびfile1entery1, file2entry2... etcは私が既に持っているCSVファイルから来ています。

解決策: 提案された解決策のように1行ですべてを取得することはできませんでしたが、正しい方向に私を指摘しました。

for f zip(glob.glob('*csv')): 
    df = pd.read_csv(f, header = None) 
    df = df.assign(id = os.path.basename(f)) # simpler than pulling from the array. Adds file name to each line. 
    dfs.append(df) 

all_data = pd.concat(dfs) 
+1

'使用する必要はありません* LEN(DF)'。新しい列にスカラーを割り当てるとき、値はすべての行に適用されます。 – Parfait

+0

ここで実際にパンダを使う必要はないことに注意してください。単純に 'csv'モジュールを使うことができます。 –

答えて

3

あなたは、各解析されたCSVにid列を追加し、i値を移入します.assign(id=i)方法を、使用することができます。

df = pd.concat([pd.read_csv(f, header = None).assign(id=i) 
       for f, i in zip(glob.glob('*.csv), short_list)], 
       ignore_index=True) 
+0

あなたのコメントに返信したい。 'str1、str2、str3'は' short_list'に格納されます。打ち間違え。 –

関連する問題