将python列表中的数据合并到一个数据框中

时间:2019-03-02 01:54:56

标签: python pandas

我在名为AMEX的文件夹中的AAMC_K.txt,AAU.txt,ACU.txt,ACY.txt中具有以下文件。我正在尝试将这些文本文件合并为一个数据框。我尝试使用pd.merge()这样做,但是我收到一个错误,即合并功能需要一个左右参数,并且我的数据在python列表中。如何将data_list中的数据合并到一个熊猫数据框中。

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

1 个答案:

答案 0 :(得分:1)

正如@busybear所说,pd.concat是完成这项工作的正确工具:frame = pd.concat(data_list)

merge用于连接两个数据帧,它们通常具有一些相同的列和一些不同的列。您选择一列(或索引或​​多个)来标识两个数据帧中的哪些行彼此对应,pandas会处理一个数据帧,其行是两个原始数据帧中相应行的组合。此功能一次仅可处理2个数据帧;您必须做一个循环以合并更多数据(这种情况很少要合并许多数据帧)。

concat适用于具有多个数据框且仅要将其所有行或列附加到一个大数据框中的情况。 (假设您要在此处串联行。)它不使用标识符来确定对应的行。它所做的就是创建一个新的数据框,该数据框具有每个concat数据框的每一行(所有行均排在第一个,然后都是第二个,依此类推。)

我认为以上是mergeconcat上不错的TLDR,但请参阅here,以获得有关使用merge / {{1}的冗长但更全面的指南} / join和数据框。