如何将多个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
是strings
的列表,我想将其放在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)
答案 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)