Python/Pandas - 合并一对多 csv 以进行反规范化
Python/Pandas - merging one to many csv for denormalization
我有一堆从关系数据库中提取的大型 csv 文件。因此,例如,我有 customers.csv
、 address.csv
和 customer-address.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 可能会在一个键有多个匹配项时覆盖值。
有没有一种方法可以将具有一对多(多对多)关系的文件连接起来?我正在考虑为每个外键创建一个完整的(冗余的)行。所以基本上是反规范化。
我的问题的答案是执行外连接。使用下面的代码 pandas 为左侧或右侧数据帧中的一个 id 的每次出现创建一个新行,从而创建一个非规范化的 table.
df1.merge(df2, left_on='CID', right_on='ID', how='outer')
我有一堆从关系数据库中提取的大型 csv 文件。因此,例如,我有 customers.csv
、 address.csv
和 customer-address.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 可能会在一个键有多个匹配项时覆盖值。
有没有一种方法可以将具有一对多(多对多)关系的文件连接起来?我正在考虑为每个外键创建一个完整的(冗余的)行。所以基本上是反规范化。
我的问题的答案是执行外连接。使用下面的代码 pandas 为左侧或右侧数据帧中的一个 id 的每次出现创建一个新行,从而创建一个非规范化的 table.
df1.merge(df2, left_on='CID', right_on='ID', how='outer')