熊猫-合并两个数据框后获得NaN

时间:2019-11-16 06:24:06

标签: python pandas merge

我有两个要合并的数据框- df stratnum 。两者都有匹配的“ STRAT”列:

df.dtypes
Out[51]: 
index     float64
BHID     category
FROM      float64
TO        float64
FE        float64
SIO2      float64
S         float64
HEM_R     float64
QTZ_R     float64
PYR_R     float64
STRAT    category
WEATH     float64
dtype: object

stratnum.dtypes
Out[52]: 
STRAT       category
stratnum       int32
dtype: object

我尝试合并这两个数据框,但得到了很多NaN。首先,我认为dtype是一个问题-在两个数据帧中, STRAT 都是object dtype,而stratnum也是。

因此,我同时将'STRAT'转换为category,并将stratnum转换为int。不过,如果我运行:

df2 = pd.merge(df, stratnum, how='left', on='STRAT').reset_index()

df2.head(5)
Out[53]: 
   level_0  index     BHID  FROM    TO    FE   SIO2      S      HEM_R  \
0        0    1.0  EMS0417   0.0   2.0  32.7  39.62  0.019  30.169856   
1        1    2.0  EMS0417   2.0   4.0  34.9  38.16  0.021  34.454128   
2        2    3.0  EMS0417   4.0   6.0  38.7  32.92  0.023  37.480192   
3        3    4.0  EMS0417   6.0   8.0  42.4  28.77  0.011  43.541773   
4        4    5.0  EMS0417   8.0  10.0  47.8  21.84  0.015  55.299471   

       QTZ_R     PYR_R STRAT  WEATH  stratnum  
0  32.160097  0.035545   TD3    0.0       NaN  
1  31.218645  0.039287   TD3    0.0       NaN  
2  25.931527  0.043029   TD3    0.0       NaN  
3  22.559341  0.020579   TD3    0.0       NaN  
4  15.487928  0.028062   TD3    0.0       NaN  

我在stratnum列中得到了一堆NaN,而在原始的stratnum数据框中,一切都很好:

tratnum.head(5)
Out[54]: 
  STRAT  stratnum
0   D1       5610
1   D2       5620
2   D3       5630
3   D4       5640
4   WL       5710

我在这里做什么错了?

编辑:我的数据似乎有问题。例如,如果我尝试为过滤 stratnum 数据帧:

test = stratnum[['STRAT']=='TD3']
...
KeyError: False

同时,如果我只是查看数据帧(#71):

stratnum

Out[74]: 
     STRAT  stratnum
0      D1       5610
1      D2       5620
2      D3       5630
3      D4       5640
...
69    TD1       8110
70    TD2       8120
71    TD3       8130
72     UN       9999
73      W       5700

是否会发生这种情况,因为我从excel电子表格中获取数据并且它具有一些奇怪的编码?

EDIT2 :将原始Excel电子表格的编码更改为UTF-8,但仍然无法正常工作。

1 个答案:

答案 0 :(得分:0)

解决了! 真奇怪我确实指定了我想要Excel文件以 utf-8 编码保存,但是当我尝试将其导出到 csv 时,结果文件中有一堆 ÿ个字符。例如,我试图找到的 TD3 看起来像ÿTD3ÿ

我迅速使用查找和替换来删除所有特殊字符,保存了csv,现在可以按预期合并作品了!