用熊猫通过匹配日期合并的.csv文件

问题描述 投票:2回答:2

我有一个目录中的多个.csv文件。我想合并/他们连接成一个文件。我想通过匹配日期以合并这些dataframes(他们都有自己的第一列名为'date')。

该代码我有工作,但没有做的日期匹配。我试过很多方法,但可能无法找到一个方法:(。

我想我不应该使用pd.concatpd.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")
python pandas
2个回答
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

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'])
© www.soinside.com 2019 - 2024. All rights reserved.