熊猫合并返回NaN

时间:2017-10-15 11:13:05

标签: python pandas dataframe merge

我遇到了两个大型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 = df1 和Motor = df2

作为结果,它会返回:

  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

我不知道为什么Output Torque列没有合并......

感谢任何帮助!

4 个答案:

答案 0 :(得分:14)

您需要int buf1c = (buf1a + buf1b)/2; int buf2c = (buf2a + buf2b)/2; 个已加入的列:

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)

答案 1 :(得分:1)

就我而言,这是因为我在使用 df.reset_index(drop=True) 拆分数据框后还没有重置索引。重置第一个数据帧的索引可以将第二个数据帧合并到它。

答案 2 :(得分:0)

根据我的经验,在关键列中有一些 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)

答案 3 :(得分:-4)

花费2-3个小时尝试解决此问题。没有rcv任何错误消息,只是NaN。 Dtypes是问题所在。