我有两个数据帧-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
我试着合并这两个数据帧,但得到了一大堆的南。首先,我认为数据类型是一个问题—在两个数据帧中,STRAT都是object
数据类型,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
我做错什么了
编辑:我的数据似乎有问题。如果我尝试为“TD3”筛选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,但仍然不起作用
修好了! 很奇怪。我确实指定要将excel文件保存在utf-8编码中,但当我尝试将其导出到csv时,生成的文件有一大堆ÿ字符。例如,我试图找到的ÿTD3型ÿ
我很快用查找和替换删除所有特殊字符,保存csv和现在合并的作品,如预期的
相关问题 更多 >
编程相关推荐