首页 > 解决方案 > 如何合并多个 CSV 文件?

问题描述

我有大约 7500 个 csv 需要合并为一个,以便创建一个易于阅读的表格。文件格式如下:

  1. 每个文件都以股票代码的形式命名(例如:AA.csv、AAL.csv、AAPL.csv 等...)

  2. 每个文件本身都包含这种格式的日期和数字

    2018-10-11,1
    2018-10-12,3
    2018-10-15,2
    ...
    

现在我想将它们合并到一个单独的 csv 文件中,其中生成的表格在标题中包含代码的名称,在第一列中包含日期并跟随数字(显然保持 csv 格式)。

例子:

示例截图

请注意,有些 csv 文件是空的,有些有不同的开始日期或日期刚刚停止

标签: pythonexcelcsv

解决方案


你可以这样做:

import pandas as pd
import numpy as np
from glob import glob

dfs_list = []
for csv_file in glob('Tickers List/*.csv'):
    stock_ticker = csv_file.split(".")[0]
    df = pd.read_csv(csv_file,header=None, names=["date","num"])
    if df.shape[0] >0:
        df["date"] = pd.to_datetime(df["date"],format="%Y-%m-%d")
        df["stock_ticker"] = stock_ticker
        dfs_list.append(df)

final_df = pd.concat(dfs_list)

我们得到glob('dir/*.csv')一个文件夹中的所有 csv 文件。

在此之后,您将拥有一个如下所示的 DataFrame: 在此处输入图像描述

如果要更改格式,可以这样做:(请注意,日期会自动排序,因为用作索引)。

final_df = pd.pivot_table(final_df, values='num', index=['date'],
               columns=['stock_ticker'], fill_value=np.nan)

您将拥有一个如下所示的 DataFrame:

在此处输入图像描述

现在您可以使用以下命令将此 DataFrame 写入新的 csv:

final_df.to_csv("merged.csv")

完整代码

import pandas as pd
import numpy as np
from glob import glob

dfs_list = []
for csv_file in glob('Tickers List/*.csv'):
    stock_ticker = csv_file.split(".")[0]
    df = pd.read_csv(csv_file,header=None, names=["date","num"])
    if df.shape[0] >0:
        df["date"] = pd.to_datetime(df["date"],format="%Y-%m-%d")
        df["stock_ticker"] = stock_ticker
        dfs_list.append(df)

final_df = pd.concat(dfs_list)

final_df = pd.pivot_table(final_df, values='num', index=['date'],
               columns=['stock_ticker'], fill_value=np.nan)

final_df.to_csv("merged.csv")

推荐阅读