python-3.x - 将浮点数转换为具有数字和 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)
我错过了什么?
解决方案
你的问题是你有真正的浮点数,而不是浮点形式的整数。所以出于安全原因,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
推荐阅读
- flutter - 当我使用 MaterialPageRoute 时我的文本小部件没有显示
- pdf - PDF 结构,缺少 >>endobj
- regex - 如何有条件地从 Scala 数据框中的列中的字符串中删除文本?
- arrays - 如何在 Verilog 中预设寄存器数组?
- apache-spark - orderby 在 spark SQL 中没有给出正确的结果
- java - 如何将java文件转换为带有图标的可执行文件
- java - 如何在 Spring Boot 中更改配置变量名称?
- c# - 以下代码如何绕过 SharePoint ASP.NET 无脚本要求,以及如何防止它?
- php - 如何使用 MySQL 解决“发生数据库错误”
- sql - 使用来自同一来源的两个不同列创建一个表/视图