【问题标题】:How to create and merge dataframes on the fly?如何动态创建和合并数据框?
【发布时间】:2019-10-22 10:55:33
【问题描述】:

我有 10 个很大的 csv 文件。我愿意

1) 读取这些文件

2) 创建数据框(以文件名作为数据框名称)

3) 根据给定的连接键,左外连接所有这些。 POIU and BVCX have only one common column to merge which is A 。请注意文件 'ABCDE' 是基础 df。所有其他数据框都应与此 'ABCDE' df 保持外部连接。也有可能还有其他常用键。但我想根据键 AB 加入,无论这两者中的哪一个都存在

我能够完成如下所示的前两个步骤

filenames = sorted(glob.glob('*.csv'))
df_list=[]
for f in filenames:
    print(f)
    t = vars()['df'+ f = pd1.read_csv(f,low_memory=False)
    df_list.append(t)

但我被困在如何离开外连接这一切并创建一个最终的数据框,该数据框将被命名为df_final?

【问题讨论】:

  • 什么是左外合并?我知道左合并外合并
  • 没有左外连接之类的吗?
  • 文件 'ABCDE' 是基本数据框。所有其他数据框都应该加入到这个

标签: python python-3.x pandas dataframe merge


【解决方案1】:

如果加入密钥是文件中存在的所有共享密钥,则无需执行任何特殊操作即可将一个加入密钥更改为 2。 您可以将它们合并到循环中:

for f in filenames:

    # YOUR CODE WITH WHATEVER YOU DO WITH IT
    print(f)
    t = vars()['df'+ f = pd1.read_csv(f,low_memory=False)
    df_list.append(t)

    # THE CODE FOR MERGING THE DFS
    cur_df = pd1.read_csv(f, low_memory=False)
    try:
        JKeys = ['A', 'B'] if 'B' in cur_df.columns else ['A']:
        df_final = df_final.merge(cur_df, right_on=JKeys, how='left')
    except:
        df_final = cur_df

【讨论】:

  • 但在此,我们如何识别ABCDE 是基本数据帧?它不见了
  • 所有数据框也可能有其他常见的列名,但我想仅基于键 AB 离开外连接。请注意,有两个 df 没有键 B
  • 我添加了一行来定义要合并的键。请注意,如果您在未合并的数据框中有公共列,那么您最终将得到两列,每个数据框对应它来自的每个数据框。 'ABCDE' 是第一个数据帧,不是吗?
  • 如果你想将所有其他人合并到它的左边,那么无论如何你必须在第一次合并中拥有它。否则,你会在第一个merge 中对另外两个文件做什么,而不知道以后当你有'ABCDE' 时你会需要什么?创建一个新的filenames 列表确实不是问题,它的第一项是“ABCDE”,即使在原始列表中它是第 5 个或类似的东西。例如,您可以这样做:filenames = ['ABCDE'] + [f for f in filenames if f != 'ABCDE'] 以确保它现在是第一个。
  • @SSMK 我放弃了它。我不使用pyspark,它没有给我一个错误,但我发现它在没有它的情况下仍然有效。
猜你喜欢
  • 2020-01-27
  • 1970-01-01
  • 2023-01-20
  • 2021-07-30
  • 2022-01-26
  • 2021-06-26
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
相关资源
最近更新 更多