python - 如何合并多个 CSV 文件?
问题描述
我有大约 7500 个 csv 需要合并为一个,以便创建一个易于阅读的表格。文件格式如下:
每个文件都以股票代码的形式命名(例如:AA.csv、AAL.csv、AAPL.csv 等...)
每个文件本身都包含这种格式的日期和数字
2018-10-11,1 2018-10-12,3 2018-10-15,2 ...
现在我想将它们合并到一个单独的 csv 文件中,其中生成的表格在标题中包含代码的名称,在第一列中包含日期并跟随数字(显然保持 csv 格式)。
例子:
请注意,有些 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)
我们得到glob('dir/*.csv')
一个文件夹中的所有 csv 文件。
如果要更改格式,可以这样做:(请注意,日期会自动排序,因为用作索引)。
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")
推荐阅读
- c# - Observable 等到时间 x 不再有变化,然后通知
- google-apps-script - 使用 Apps 脚本为 Twilio 的 Authy 构建 JWT
- c# - 这个不可变对象是线程安全的吗?
- automation - 是否可以通过机器人框架使用 Active Directory 身份验证?
- excel - 如何用月份的日期填充数组?
- android - Firebase 存储:从存储中下载文件而无需下载 uri
- pdf - Power BI 自定义视觉对象导出为 PDF
- python - 重新安装 Windows 10 后 Autopep8 和其他模块无法正常工作
- html - 不会隐藏 Outlook 电子邮件中的内容
- node.js - 服务器端渲染(Next.js)和静态站点渲染(Gatsby.js)有什么区别?