我的目录中有多个.csv
文件。我想将它们合并/合并为一个文件。我想通过匹配日期来合并这些数据框(它们的第一列都名为'date'
)。
我有工作的代码,但没有在日期上进行匹配。我尝试了许多解决方法,但找不到方法:(。
我想我不应该使用pd.concat
,而应该使用pd.merge
,但是不要使用dataV = pd.merge(list_data, on='Date', how='outer')
import pandas as pd
import glob
csv_files = glob.glob('./desktop/2019/*.csv')
list_data = []
for filename in csv_files:
data = pd.read_csv(filename,usecols=['Date','Quantity'])
list_data.append(data)
list_data
dataV = pd.concat(list_data,axis=1,sort=False)
dataV.to_csv("./desktop/test.csv")
答案 0 :(得分:0)
带有.csv
文件内容:
DateCol;QuantityCol
2015-01-02;10
2015-01-03;20
2015-01-04;30
2015-01-05;40
您可以使用reduce
方法:
import os
import pandas as pd
from functools import reduce
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
os.chdir(r'C:\Temp')
dfs = [
pd.read_csv(csv_file, sep=';') for csv_file in
[f for f in os.listdir() if os.path.splitext(f)[1] == '.csv']
]
merged = reduce(lambda left, right: pd.merge(left, right, on='DateCol'), dfs)
print(merged)
merged.to_csv('out.csv', sep=';', index=False)
输出.csv
文件内容:
DateCol;QuantityCol_x;QuantityCol_y;QuantityCol_x;QuantityCol_y;QuantityCol
2015-01-02;10;100;1000;10000;100000
2015-01-03;20;200;2000;20000;200000
2015-01-04;30;300;3000;30000;300000
2015-01-05;40;400;4000;40000;400000
在使用.csv
导出到merged.columns = ['DateCol', 'Quan1', 'Quan2', 'Quan3', 'Quan4', 'Quan5']
文件之前,可以重命名列。
您还可以计算读取的.csv
个文件的数量(或创建的数据帧的数量),然后构造要使用的列的列表,例如
columns_to_use = ['DateCol'] + ['Quantity_{}'.format(idx) for idx in range(1, len(dfs) + 1)]
merged.columns = columns_to_use
答案 1 :(得分:0)
import pandas as pd
import os
dir = '/home/brb/bugs/mecd/abs-data/'
first = True
for folder, subfolders, files in os.walk(dir):
for f in files:
file = str(folder)+str(f)
if file.split('.')[-1] == 'csv':
if first:
data = pd.read_csv(file)
first = False
else:
df = pd.read_csv(file)
data = pd.merge(data, df, on=['Date', 'Date'])