首页 > 解决方案 > pandas merge() 将 int 转换为 float

问题描述

我发现很多人在 SO 上问这个问题,有些人回答说这已经在几年前修复了,但为什么我仍然遇到这种情况?

以下是 ipython 中的重现代码和结果:

In [4]: df1 = pd.DataFrame([{'n': '001', 'b': 0}, {'n': '002', 'b': 1}])
In [5]: df2 = pd.DataFrame([{'n': '001', 'c': 3}])
In [6]: df3 = pd.merge(df1, df2, how='left', on='n')
In [7]: df3
Out[7]: 
     n  b    c
0  001  0  3.0
1  002  1  NaN
In [8]: df2.dtypes
Out[8]: 
n    object
c     int64
dtype: object
In [9]: df3.dtypes
Out[9]: 
n     object
b      int64
c    float64
dtype: object
In [11]: pd.__version__
Out[11]: '1.3.0'

标签: pythonpandasdataframe

解决方案


术后铸造:

 df1 = pd.DataFrame([{'n': '001', 'b': 0}, {'n': '002', 'b': 1}])
    df2 = pd.DataFrame([{'n': '001', 'c': 3}])
    df3 = pd.merge(df1, df2, how='left', on='n')
    df3['b'] = df3['b'].astype(int)
    df3['c'] = df3['c'].astype(int)
    print(df3.dtypes)

更多信息:https ://stackoverflow.com/a/67004218/9455902


推荐阅读