首页 > 解决方案 > 将浮点数转换为具有数字和 nan 的列的整数

问题描述

我正在使用 Python 3.6 和 Pandas 1.0.3。

我想将浮点数从“A”列转换为 int... 此列有一些 nan 值。

所以我用@jezrael的解决方案关注了这篇文章。

但我收到以下错误:“TypeError:无法安全地将非等效 float64 转换为 int64”

这是我的代码

import pandas as pd
import numpy as np

data = {'timestamp': [1588757760.0000, 1588757760.0161, 1588757764.7339, 1588757764.9234], 'A':[9087.6000, 9135.8000, np.nan, 9102.1000], 'B':[0.1648, 0.1649, '', 5.3379], 'C':['b', 'a', '', 'a']}
df = pd.DataFrame(data)
df['A'] = pd.to_numeric(df['A'], errors='coerce').astype('Int64')
print(df)

我错过了什么?

标签: python-3.xpandasdataframe

解决方案


你的问题是你有真正的浮点数,而不是浮点形式的整数。所以出于安全原因,pandas 不会转换它们,因为你会得到其他值。

所以你需要首先明确地将它们四舍五入为整数,然后才使用该.astype()方法:

df['A'] = pd.to_numeric(df['A'].round(), errors='coerce').astype('Int64')

测试:

print(df)
      timestamp     A       B  C
0  1.588758e+09  9088  0.1648  b
1  1.588758e+09  9136  0.1649  a
2  1.588758e+09   NaN           
3  1.588758e+09  9102  5.3379  a

推荐阅读