【问题标题】:Python/Pandas - merging one to many csv for denormalizationPython/Pandas - 合并一对多 csv 以进行非规范化
【发布时间】:2018-03-11 05:31:55
【问题描述】:

我有一堆从关系数据库中提取的大型 csv 文件。例如,我有 customers.csvaddress.csvcustomer-address.csv 映射关系的键值。我在这里找到了有关如何合并文件的答案: Python/Panda - merge csv according to join table/csv

所以现在我的代码如下所示:

df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)
df3 = pd.read_csv(file3)

df = (df3.merge(df1, left_on='CID', right_on='ID')
         .merge(df2, left_on='AID', right_on='ID', suffixes=('','_'))
         .drop(['CID','AID','ID_'], axis=1))
print (df)

现在我注意到我的文件具有一对多关系,并且当一个键有多个匹配项时,pandas 上面的代码可能会覆盖值。

有没有一种方法可以连接具有一对多(多对多)关系的文件?我正在考虑为每个外键创建一个完整的(冗余)行。所以基本上是非规范化。

【问题讨论】:

    标签: data-structures denormalization


    【解决方案1】:

    我的问题的答案是执行外连接。使用下面的代码,pandas 为左侧或右侧数据帧中每个 id 的出现创建一个新行,从而创建一个非规范化表。

    df1.merge(df2, left_on='CID', right_on='ID', how='outer')
    

    【讨论】:

      猜你喜欢
      • 2013-06-30
      • 2013-03-08
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      • 2016-11-12
      相关资源
      最近更新 更多