Pandas Merge返回NaN

hmae6n7t  于 2023-05-12  发布在  其他
关注(0)|答案(4)|浏览(162)

我在合并两个大型 Dataframe 时遇到了问题,因为合并返回NaN值,尽管有拟合值。两个dfs的形状如下:

df1

Motor
2232
1524
2230
2230
2224
1516
1724
2224
1524
1624
1724
2224
2224
1524
1524
1516
1524
2224
1624
1724
1724
2224
2224

df2

Motor   Output Torque (mNm)
0615    0,17
1219    0,72
1516    0,59
1624    2
2230    4,7
2233    5,9
0816    0,7
1016    0,92
1024    1,6
1224    1,7
1319    1,4
1331    3,8
1516    0,97
1524    2,9
1717    2,2
1724    4,5
2224    6,8
2232    10
1336    3,6
1727    4,9
1741    8,8
2237    12
2642    26

我使用代码:

MergeDat=MergeDat.merge(Motor,how="left")
print(MergeDat)

其中,MergeDat= df 1,Motor= df 2

result返回:

Motor  Output Torque (mNm)
0      2232                  NaN
1      1524                  NaN
2      2230                  NaN
3      2230                  NaN
4      2224                  NaN
5      1516                  NaN
6      1724                  NaN
7      2224                  NaN
8      1524                  NaN
9      1624                  NaN
10     1724                  NaN
11     2224                  NaN
12     2224                  NaN
13     1524                  NaN
14     1524                  NaN
15     1516                  NaN
16     1524                  NaN
17     2224                  NaN
18     1624                  NaN
19     1724                  NaN
20     1724                  NaN
21     2224                  NaN
22     2224                  NaN
23     1524                  NaN
24     1724                  NaN
25     1841                  NaN
26     2224                  NaN

我不知道为什么输出扭矩列没有合并……
感谢任何帮助!

qkf9rpyu

qkf9rpyu1#

您需要相同的dtype连接列:

#convert first or second to str or int
MergeDat['Motor'] = MergeDat['Motor'].astype(str)
#Motor['Motor'] = Motor['Motor'].astype(str)

#MergeDat['Motor'] = MergeDat['Motor'].astype(int)
Motor['Motor'] = Motor['Motor'].astype(int)
#convert first or second to str or int
#MergeDat['Motor'] = MergeDat['Motor'].astype(str)
Motor['Motor'] = Motor['Motor'].astype(str)

MergeDat['Motor'] = MergeDat['Motor'].astype(int)
#Motor['Motor'] = Motor['Motor'].astype(int)

MergeDat=MergeDat.merge(Motor,how="left")
wj8zmpe1

wj8zmpe12#

在我的例子中,这是因为我在使用df.reset_index(drop=True)拆分 Dataframe 后没有重置索引。重置第一 Dataframe 的索引使得能够将第二 Dataframe 合并到第一 Dataframe 。

xnifntxz

xnifntxz3#

根据我的经验,在键列中有一些NaN是通常的罪魁祸首。在两个df上至少尝试这3行中的第2行(其中unique_id是用于合并的键列),看看是否有帮助:

print(df[unique_id].duplicated().sum())
df.drop_duplicates(subset=unique_id, inplace=True)
assert(df[unique_id].duplicated().sum() == 0)
cgfeq70w

cgfeq70w4#

对我来说,我认为我有相同的索引,但在索引中有一个尾随的空间,用于第一个 Dataframe 。删除/修剪有帮助。

相关问题