python - 将python列表中的数据合并到一个数据框中
问题描述
我在名为 AMEX 的文件夹中的 AAMC_K.txt、AAU.txt、ACU.txt、ACY.txt 中有以下文件。我正在尝试将这些文本文件合并到一个数据框中。我曾尝试使用 pd.merge() 这样做,但我收到一个错误,即合并函数需要一个左右参数,而我的数据位于 python 列表中。如何将 data_list 中的数据合并到一个 pandas 数据框中。
import pandas as pd
import os
textfile_names = os.listdir("AMEX")
textfile_names.sort()
data_list = []
for i in range(len(textfile_names)):
data = pd.read_csv("AMEX/"+textfile_names[i], index_col=None, header=0)
data_list.append(data)
frame = pd.merge(data_list, on='<DTYYYYMMDD>', how='outer')
"AE.txt"
<TICKER>,<PER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>,<OPENINT>
AE,D,19970102,000000,12.6250,12.6250,11.7500,11.7500,144,0
AE,D,19970103,000000,11.8750,12.1250,11.8750,12.1250,25,0
AAU.txt
<TICKER>,<PER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>,<OPENINT>
AAU,D,20020513,000000,0.4220,0.4220,0.4220,0.4220,0,0
AAU,D,20020514,000000,0.4177,0.4177,0.4177,0.4177,0,0
ACU.txt
<TICKER>,<PER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>,<OPENINT>
ACU,D,19970102,000000,5.2500,5.3750,5.1250,5.1250,52,0
ACU,D,19970103,000000,5.1250,5.2500,5.0625,5.2500,12,0
ACY.txt
<TICKER>,<PER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>,<OPENINT>
ACY,D,19980116,000000,9.7500,9.7500,8.8125,8.8125,289,0
ACY,D,19980120,000000,8.7500,8.7500,8.1250,8.1250,151,0
我希望使用 DTYYYYMMDD 过滤输出并放入一个数据帧帧中。
OUTPUT
<TICKER>,<PER>,<DTYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>,<OPENINT>,<TICKER>,<PER>,<DTYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>,<OPENINT>
ACU,D,19970102,000000,5.2500,5.3750,5.1250,5.1250,52,0,AE,D,19970102,000000,12.6250,12.6250,11.7500,11.7500,144,0
ACU,D,19970103,000000,5.1250,5.2500,5.0625,5.2500,12,0,AE,D,19970103,000000,11.8750,12.1250,11.8750,12.1250,25,0
解决方案
正如@busybear 所说,pd.concat
是完成这项工作的正确工具:frame = pd.concat(data_list)
.
merge
适用于当您加入两个通常具有一些相同列和一些不同列的数据框时。您选择一个列(或索引或多个)来标识两个数据帧中的哪些行彼此对应,并pandas
处理制作一个数据帧,其行是两个原始数据帧中相应行的组合。此功能一次仅适用于 2 个数据帧;你必须做一个循环来合并更多(需要以这种方式合并许多数据帧是不常见的)。
concat
适用于当您有多个数据框并且只想将其所有行或列附加到一个大数据框时。(假设您正在连接行,如您所愿。)它不使用标识符来确定哪些行对应。它所做的只是创建一个新的数据框,其中包含来自每个concat
ed 数据框的每一行(第一个中的所有行,然后是第二个中的所有行,等等)。
merge
我认为以上是关于vs的一个不错的 TLDR,concat
但请参阅此处merge
以获取有关使用//join
与数据帧的冗长但更全面的指南concat
。
推荐阅读
- debugging - 尽管蓝图中有 IsValid 块,但 Niagara 粒子系统 IsValid 错误?
- java - 由于一切设置正确,Google Firebase 实时数据库无法正常工作
- android - Facebook 竞价与 Android 中的 MAX 集成
- python - Python多线程事件监听器
- python-3.x - 如何使用 matplotlib 显示颜色图
- apache-flink - 如何从 flink 作业中查找 db 数据
- node.js - 从 docker 容器中连接到 localhost postgres 数据库
- python - 如何从数据库中读取坐标并使用 django 在地图上映射指针
- javascript - 通过其父类使用 JavaScript 获取子输入的值
- postgresql - 你能描述一下这个FlameGraph(Postgres,RHEL7)为什么CPU等待和阻塞进程吗