gpt4 book ai didi

python - 如何合并多个数据框

转载 作者:IT老高 更新时间:2023-10-28 21:57:14 28 4
gpt4 key购买 nike

我有不同的数据框,需要根据日期列将它们合并在一起。如果我只有两个数据框,我可以使用 df1.merge(df2, on='date') ,要使用三个数据帧,我使用 df1.merge(df2.merge(df3, on='date'), on='date') ,但是用多个数据帧来做这件事变得非常复杂和不可读。

所有数据框都有一个共同的列 - date ,但它们的行数和列数都不相同,我只需要每个数据帧中每个日期都相同的那些行。

所以,我正在尝试编写一个递归函数,该函数返回一个包含所有数据的数据帧,但它不起作用。那我应该如何合并多个数据框呢?

我尝试了不同的方法,得到了像 out of range 这样的错误。 , keyerror 0/1/2/3can not merge DataFrame with instance of type <class 'NoneType'> .

这是我写的脚本:

dfs = [df1, df2, df3] # list of dataframes

def mergefiles(dfs, countfiles, i=0):
if i == (countfiles - 2): # it gets to the second to last and merges it with the last
return

dfm = dfs[i].merge(mergefiles(dfs[i+1], countfiles, i=i+1), on='date')
return dfm

print(mergefiles(dfs, len(dfs)))

一个例子:df_1:

May 19, 2017;1,200.00;0.1%
May 18, 2017;1,100.00;0.1%
May 17, 2017;1,000.00;0.1%
May 15, 2017;1,901.00;0.1%

df_2:

May 20, 2017;2,200.00;1000000;0.2%
May 18, 2017;2,100.00;1590000;0.2%
May 16, 2017;2,000.00;1230000;0.2%
May 15, 2017;2,902.00;1000000;0.2%

df_3:

May 21, 2017;3,200.00;2000000;0.3%
May 17, 2017;3,100.00;2590000;0.3%
May 16, 2017;3,000.00;2230000;0.3%
May 15, 2017;3,903.00;2000000;0.3%

预期的合并结果:

May 15, 2017;  1,901.00;0.1%;  2,902.00;1000000;0.2%;   3,903.00;2000000;0.3%   

最佳答案

如果不涉及复杂查询,以下是合并多个数据帧的最简洁、最易于理解的方法。

只需简单地将 DATE 合并为索引,然后使用 OUTER 方法进行合并(以获取所有数据)。

import pandas as pd
from functools import reduce

df1 = pd.read_table('file1.csv', sep=',')
df2 = pd.read_table('file2.csv', sep=',')
df3 = pd.read_table('file3.csv', sep=',')

现在,基本上将您拥有的所有文件作为数据框加载到列表中。然后,使用 mergereduce 函数合并文件。

# compile the list of dataframes you want to merge
data_frames = [df1, df2, df3]

注意:您可以在上面的列表中添加尽可能多的数据框。这是此方法的优点。不涉及复杂的查询。

要保持属于同一日期的值,您需要在 DATE

合并它
df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['DATE'],
how='outer'), data_frames)

# if you want to fill the values that don't exist in the lines of merged dataframe simply fill with required strings as

df_merged = reduce(lambda left,right: pd.merge(left,right,on=['DATE'],
how='outer'), data_frames).fillna('void')
  • 现在,输出将在同一行上显示同一日期的值。
  • 您可以使用 fillna() 为不同的列填充来自不同帧的不存在数据。

如果需要,然后将合并后的数据写入 csv 文件。

pd.DataFrame.to_csv(df_merged, 'merged.txt', sep=',', na_rep='.', index=False)

这应该给你

DATE VALUE1 VALUE2 VALUE3 ....

关于python - 如何合并多个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com