如何合并或更新数据框?
How do I merge or update dataframes?
我有一个原始数据框:
导入 pandas 作为 pd
df = pd.read_excel("Weights.xlsx", sheet_name='Old')
df:
Name S_Name Height Weight
0 John Wright 5.3 52
1 Seven Taylor 6.4 75
2 Ramsay Sen 7.2 77
我每次都会得到一个包含更新/新信息的新文件。
示例:
df1 = pd.read_excel("Weights.xlsx", sheet_name='New')
df1:
Name S_Name Height Weight
0 John Wright 5.1 57
1 Seven Taylor 6.3 76
2 Ramsay Sen 7.0 71
3 Radio Mast 5.3 62
4 Randy Stenson 6.4 65
You can find the file used here
我想保留 df
的值,同时从 df1
添加新的行给新的 Name
和 S_Name
,这样生成的数据帧如下:
df_final
Name S_Name Height Weight
0 John Wright 5.3 52
1 Seven Taylor 6.4 75
2 Ramsay Sen 7.2 77
3 Radio Mast 5.3 62
4 Randy Stenson 6.4 65
我想补充一点,这两个文件的索引每次都不相同。工作流中有一个排序函数,每次都会改变这些值的索引位置。
如果你不能保证索引对齐,你需要同时使用 merge
和update
(或者你的combine_first
不想原地修改df1
)
您可以将 DataFrame 与 merge
对齐,然后 update
:
ids = ['Name', 'S_Name']
df1.update(df1[ids].merge(df, how='left'))
print(df1)
输出:
Name S_Name Height Weight
0 John Wright 5.3 52.0
1 Seven Taylor 6.4 75.0
2 Ramsay Sen 7.2 77.0
3 Radio Mast 5.3 62.0
4 Randy Stenson 6.4 65.0
如果您想要一个新的 DataFrame:
ids = ['Name', 'S_Name']
df_final = df.combine_first(df1[ids].merge(df, how='left'))
print(df_final)
注意。在这两种情况下,您都需要确保您有 non-duplicated 合并键
我有一个原始数据框:
导入 pandas 作为 pd
df = pd.read_excel("Weights.xlsx", sheet_name='Old')
df:
Name S_Name Height Weight
0 John Wright 5.3 52
1 Seven Taylor 6.4 75
2 Ramsay Sen 7.2 77
我每次都会得到一个包含更新/新信息的新文件。 示例:
df1 = pd.read_excel("Weights.xlsx", sheet_name='New')
df1:
Name S_Name Height Weight
0 John Wright 5.1 57
1 Seven Taylor 6.3 76
2 Ramsay Sen 7.0 71
3 Radio Mast 5.3 62
4 Randy Stenson 6.4 65
You can find the file used here
我想保留 df
的值,同时从 df1
添加新的行给新的 Name
和 S_Name
,这样生成的数据帧如下:
df_final
Name S_Name Height Weight
0 John Wright 5.3 52
1 Seven Taylor 6.4 75
2 Ramsay Sen 7.2 77
3 Radio Mast 5.3 62
4 Randy Stenson 6.4 65
我想补充一点,这两个文件的索引每次都不相同。工作流中有一个排序函数,每次都会改变这些值的索引位置。
如果你不能保证索引对齐,你需要同时使用 merge
和update
(或者你的combine_first
不想原地修改df1
)
您可以将 DataFrame 与 merge
对齐,然后 update
:
ids = ['Name', 'S_Name']
df1.update(df1[ids].merge(df, how='left'))
print(df1)
输出:
Name S_Name Height Weight
0 John Wright 5.3 52.0
1 Seven Taylor 6.4 75.0
2 Ramsay Sen 7.2 77.0
3 Radio Mast 5.3 62.0
4 Randy Stenson 6.4 65.0
如果您想要一个新的 DataFrame:
ids = ['Name', 'S_Name']
df_final = df.combine_first(df1[ids].merge(df, how='left'))
print(df_final)
注意。在这两种情况下,您都需要确保您有 non-duplicated 合并键