Dei*_*aak 4 python merge pandas
我有两个数据框,它们都有一个列,其中可以具有相同的数字/值。一个大约 300 行的小 df(这是我的主文件)和 1 个大约 5000 行的 df。我想合并 1 列,但打印数据时无法获得相同数量的行。
第一个(小)数据框(左):
import pandas as pd
df1 = pd.read_excel('./file.xlsx')
df1 = df.replace(' ', np.nan)
df1.head()
col1
row1 123456
row2 123457
row3 123458
row4 123459
row5 123450
Run Code Online (Sandbox Code Playgroud)
第二个(大)df(右):
import pandas as pd
df2 = pd.read_excel('./file2.xlsx')
df2 = df.replace(' ', np.nan)
df2
col1 col2
row1 123456 hello1
row2 123457 hello2
row3 123458 hello3
row4 123459 hello4
row5 123450 hello4
row7 555555 street1
row8 666666 street1
row9 777777 street1
Run Code Online (Sandbox Code Playgroud)
我试过:
merged = pd.merge(left=df1, right=df2, how='inner', left_on='col1', right_on='col1')
print("Orginele data", len(df1))
print("Merged data", len(df2))
Run Code Online (Sandbox Code Playgroud)
当我打印时,我在左侧 df 中看到大约 30k 行,但我只想查看左侧 df 中使用的行(约 300 行)。其中大多数是 NaN。我尝试更改“how=”,但这不起作用。我还检查了帖子“Merging 101”,但似乎无法弄清楚这一点。
左侧(小)数据帧的预期结果:
col1 col2
row1 123456 hello1
row2 123457 hello2
row3 123458 hello3
row4 123459 hello4
row5 123450 hello4
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助和努力。谢谢你!
小智 5
尝试dataframe.join指定how='left默认值
import pandas as pd
df = pd.DataFrame({"a": [0,0,1,1,2,2,2,]})
df2 = pd.DataFrame({"a": [0, 1,2,3,4,5,6,7,8,9], "b": list("abcdefghij")})
df.join(df2, on="a", lsuffix="df_a", rsuffix="df_b")
# output
adf_a adf_b b
0 0 0 a
1 0 0 a
2 1 1 b
3 1 1 b
4 2 2 c
5 2 2 c
6 2 2 c
Run Code Online (Sandbox Code Playgroud)