我有两个要合并的数据框- 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
我在这里做什么错了?
编辑:我的数据似乎有问题。例如,如果我尝试为
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,但仍然无法正常工作。
答案 0 :(得分:0)
解决了! 真奇怪我确实指定了我想要Excel文件以 utf-8 编码保存,但是当我尝试将其导出到 csv 时,结果文件中有一堆 ÿ个字符。例如,我试图找到的 TD3 看起来像ÿTD3ÿ。
我迅速使用查找和替换来删除所有特殊字符,保存了csv,现在可以按预期合并作品了!