我在一个目录中有多个csv文件。所有这些文件都有两列公用。
file1.csv
common_col1 common_col2 var1 var2 var3
abc|xyz 2018-10-07 100 200 300
abc|xyz 2018-10-14 80 80 90
abc|xyz 2018-10-21 34 35 36
abc|qrs 2018-10-07 1000 2000 3000
abc|qrs 2018-10-14 800 800 90
abc|qrs 2018-10-21 340 350 36
file2.csv
common_col1 common_col2 var4 var5 var6
abc|xyz 2018-10-07 "one" 150 203
abc|xyz 2018-10-14 "two" 38 90
abc|xyz 2018-10-21 "three" 35 45
abc|qrs 2018-10-07 "four" 654 678
abc|qrs 2018-10-14 "five" 67 90
abc|qrs 2018-10-21 "six" 25 76
,同样是file3.csv,file4.csv等。
最后,我的结果应如下所示:
common_col1 common_col2 var1 var2 var3 var4 var5 var6
abc|xyz 2018-10-07 100 200 300 "one" 150 203
abc|xyz 2018-10-14 80 80 90 "two" 38 90
abc|xyz 2018-10-21 34 35 36 "three" 35 45
abc|qrs 2018-10-07 1000 2000 3000 "four" 654 678
abc|qrs 2018-10-14 800 800 90 "five" 67 90
abc|qrs 2018-10-21 340 350 36 "six" 25 76
我尝试了以下代码:
filepaths = [f for f in os.listdir("/home/csvfiles") if f.endswith('.csv')]
tmp_dump = pd.concat(map(pd.read_csv, filepaths), sort=False)
尽管这没有在tmp_dump中复制'common_col1'和'common_col2',但我不确定这是正确的做法。确实,我还在某些列中看到了所有NaN,这很奇怪!对我来说,获取单个数据框的好方法是什么?
感谢所有帮助。 库马尔
答案 0 :(得分:2)
dir = '/home/csvfiles/'
filepaths = [dir + f for f in os.listdir(dir) if f.endswith('.csv')]
def read_csv(fp):
return pd.read_csv(
fp, delim_whitespace=True,
index_col=['common_col1', 'common_col2']
)
tmp_dump = pd.concat(map(read_csv, filepaths), sort=False, axis=1)
我还是想使用pathlib
import os
from pathlib import Path
filepaths = Path('home/csvfiles/').glob('*.csv')
def read_csv(fp):
return pd.read_csv(
fp, delim_whitespace=True,
index_col=['common_col1', 'common_col2']
)
tmp_dump = pd.concat(map(read_csv, filepaths), sort=False, axis=1)