如何将CSV文件与Pandas组合(并添加识别列)

时间:2016-09-20 20:56:01

标签: python csv pandas

如何将多个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)

除识别列外,一切正常。 istrings的列表,我想将其放在all_data的A列中。每列的每一行都有一个字符串。相反,它返回了很多数字,并给出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文件。

解决方案: 我不能像解决方案建议的那样在一条线上得到它,但它指出了我正确的方向。

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 个答案:

答案 0 :(得分:3)

您可以使用.assign(id=i)方法,该方法会为每个已解析的CSV添加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)