我有很多csv文件,如下所示:
file_1.csv
name num
Ab 8
Dd 9
Cc 20
Kk 69
file_2.csv
name num
Ab 23
Dd 3
Kk 20
Jj 30
,依此类推... 现在,您会看到一个名称可能不会出现在第一个csv中,但会出现在其他csv中。
现在,我主要关心的是将它们全部合并在一个数据帧中(连接在一起),如下所示: big_df
name num num2 num3....numN
Ab 8 23 ...
Dd 9 3 ...
其中N是具有num列的csv文件数
我花了很多时间寻找解决方案,这就是我得到的:
path = 'E:\\my_path\\**\\*.csv'
all_rec = iglob(path, recursive = True)
dataframes = (pd.read_csv(f, sep = ';', skiprows = 1, header = None) for f in all_rec)
big_df = pd.concat(dataframes, ignore_index = True)
不是很适合我。
答案 0 :(得分:0)
根据需要获取文件列表。我不知道该目录中是否还有其他Path = apache2/php.ini
个文件,请根据需要进行修改。
此处的关键是您希望将.csv
设置为索引,这样name
将在您加入pd.concat
时将其对齐。您可以使用DataFrames
获取文件号,然后将其附加到列名。
regex
import os
import re
import pandas as pd
path = 'define_your_path'
files = [x for x in os.listdir(path) if '.csv' in x]
#['file_1.csv', 'file_2.csv']
lst = []
for f in files:
lst.append(pd.read_csv(path+f)
.set_index('name')
.add_suffix(re.search('.*_(.*)\.', f).group(1)))
big_df = pd.concat(lst, axis=1, sort=False)
big_df
file_1.csv:
num1 num2
Ab 8.0 23.0
Dd 9.0 3.0
Cc 20.0 NaN
Kk 69.0 20.0
Jj NaN 30.0
file_2.csv:
name,num
Ab,8
Dd,9
Cc,20
Kk,69