Python数据错误:ValueError:int()的无效文字,基数为10:'42152129.0'

Posted

技术标签:

【中文标题】Python数据错误:ValueError:int()的无效文字,基数为10:\'42152129.0\'【英文标题】:Python data error: ValueError: invalid literal for int() with base 10: '42152129.0'Python数据错误:ValueError:int()的无效文字,基数为10:'42152129.0' 【发布时间】:2016-11-14 22:26:01 【问题描述】:

我正在使用 Python 进行一个简单的数据科学项目。但是,我收到以下错误:

ValueError:无法将字符串转换为浮点数:

我的代码如下所示:

import matplotlib.pyplot as plt 
import csv
from datetime import datetime

filename = 'USAID.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)

monies = []
for row in reader:
   money = int(row[1])
   monies.append(money)
print(monies)

如果我换行:

money = int(row[1]) to money = float(row[1])

我收到此错误:ValueError:无法将字符串转换为浮点数: 这是我的回溯:第一个错误:

Traceback (most recent call last):
File "funding.py", line 60, in <module>
  money = int(row[1])
ValueError: invalid literal for int() with base 10: '42152129.0'

第二个错误:

Traceback (most recent call last):
File "funding.py", line 60, in <module>
  money = float(row[1])
ValueError: could not convert string to float:

任何帮助都会很棒!谢谢!

【问题讨论】:

有什么理由不使用 pandas read_csv 方法加载这个? df = pd.read_csv(filename)?这将为您的数据使用适当的dtypes,此外您还可以使用astype轻松转换:df['col'] = pd.to_numeric(df['col'], errors='coerce') 你没有告诉你期望你的代码做什么,为什么会这样。错误很明显 - '42152129.0' 不能明确地转换为 int(因为它不是 int 的有效字符串表示形式),``(空字符串)也不能明确地转换为 float。 我一直在考虑使用 Pandas 并且过去几天一直在考虑,但是,我想绘制数据,但目前还不确定如何在 Pandas 中执行此操作。我只想绘制对某些国家的经济援助数据,x 轴是日期,y 是金额。 pandas 支持绘图方法和matplotlib,例如您可以直接调用df.plot()df.plot().barh(),参见docs 哦,我会检​​查一下!这是我真正想做的,但还没有找到一个很好的教程来展示我一起使用 matplotlib 和 Pandas。 (这实际上是我想要的,我会检查文档。) 【参考方案1】:

第一次失败是因为你将一个带有.的字符串传递给int();您不能将其转换为整数,因为有小数部分。

第二次失败是由于不同 row[1] 字符串值;一个是空的。

你可以测试一下:

if row[1]:
   money = float(row[1])

由于您正在处理数据科学项目,您可能需要考虑使用 pandas project 来加载您的 CSV,而不是使用 DataFrame.read_csv()

【讨论】:

try-except 包装器【参考方案2】:

row[1] 中的某些条目是空的,因此您可能需要在尝试投射之前检查这些条目。如果条目为空,则传递默认值,例如 0

那么您应该考虑使用decimal 进行与金钱相关的计算。

【讨论】:

@MartijnPieters OP 与金钱打交道。边际损失不可协商 虽然 pandas 支持 decimal 有点问题,但在这种情况下我会坚持使用像 floatfloat64 这样的 numpy 类型 @MosesKoledoye:很公平。【参考方案3】:

我在使用 Seaborn 学习数据可视化时遇到了同样的问题。感谢EdChum的帮助,我用他的方法解决了这个问题:

df['col'] = pd.to_numeric(df['col'], errors='coerce')

【讨论】:

以上是关于Python数据错误:ValueError:int()的无效文字,基数为10:'42152129.0'的主要内容,如果未能解决你的问题,请参考以下文章

Python中ValueError: invalid literal for int() with base 10 的实用解决办法

请问这段python代码哪里出错了,错误代码:ValueError: invalid literal for int() with base 10: ','?

ValueError: int() 以 10 为基数的无效文字:''

Python 属性错误:“int”对象没有属性“reshape”

ValueError:int() 的无效文字,以 10 为底错误

Python异常 ValueError的问题详解