python - 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'
解决方案
术后铸造:
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)
推荐阅读
- c# - 从点数组中查找给定点坐标的索引
- php - php 和 mysql 多个和/或在 select 语句中
- node.js - 如何使用 Node 服务器处理预检 CORS 请求?
- python - 带有代理的python“请求”包不起作用
- android - 2 回收适配器中的视图支架
- c - 具有自动存储持续时间的变量的地址可以在其定义中使用吗?
- javascript - angular 6/rxjs of/map 等中的导入不正确
- ios - map 方法如何在字符串类型上工作?
- python - Python - 不以点开头或结尾的正则表达式 Ip
- javascript - Highchart.js 在纯 IE8 中无法正常工作