如何修复 pandas 中以 10 为底的错误的 int() 的无效文字
How do I fix invalid literal for int() with base 10 error in pandas
这是每当我尝试将数据帧转换为 int 时出现的错误。
("invalid literal for int() with base 10: '260,327,021'",'occurred at index Population1'
df 中的所有内容都是数字。我认为错误是由于末尾的额外引号引起的,但我该如何解决?
我运行这个
int('260,327,021')
得到这个
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-448-a3ba7c4bd4fe> in <module>()
----> 1 int('260,327,021')
ValueError: invalid literal for int() with base 10: '260,327,021'
我向您保证,并非数据框中的所有内容都是数字。它可能看起来像一个数字,但它是一个带逗号的字符串。
您需要替换逗号,然后转到 int
pd.Series(['260,327,021']).str.replace(',', '').astype(int)
0 260327021
dtype: int64
当字符串为浮点数时,其他人可能会遇到以下问题:
>>> int("34.54545")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '34.54545'
解决方法是先转换为 float,然后再转换为 int:
>>> int(float("34.54545"))
34
或pandas具体:
df.astype(float).astype(int)
解决了错误
在你的情况下,
data.Population1 = pd.to_numeric(data.Population1, errors="coerce")
'data' 是父对象。
之后,你也可以将float转换为int
data.Population1.astype(int)
对我来说,情况有点不同。
我这样加载我的数据框:
my_converter = {'filename': str, 'revision_id': int}
df = pd.read_csv("my.csv", header=0, sep="\t", converters=my_converter)
因为 head -n 3 my.csv
看起来像这样:
"filename" "revision_id"
"some_filename.pdf" "224"
"another_filename.pdf" "128"
然而,向下几千行,有这样一个条目:
"very_\"special\"_filename.pdf" "46"
这意味着我必须为 read_csv()
指定转义字符。否则,它会尝试将 special
转换为 int
用于 revision_id
字段并生成错误。
所以正确的做法是:
df = pd.read_csv("my.csv", header=0, sep="\t", escapechar='\', converters=my_converter)
这是每当我尝试将数据帧转换为 int 时出现的错误。
("invalid literal for int() with base 10: '260,327,021'",'occurred at index Population1'
df 中的所有内容都是数字。我认为错误是由于末尾的额外引号引起的,但我该如何解决?
我运行这个
int('260,327,021')
得到这个
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-448-a3ba7c4bd4fe> in <module>() ----> 1 int('260,327,021') ValueError: invalid literal for int() with base 10: '260,327,021'
我向您保证,并非数据框中的所有内容都是数字。它可能看起来像一个数字,但它是一个带逗号的字符串。
您需要替换逗号,然后转到 int
pd.Series(['260,327,021']).str.replace(',', '').astype(int)
0 260327021
dtype: int64
当字符串为浮点数时,其他人可能会遇到以下问题:
>>> int("34.54545")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '34.54545'
解决方法是先转换为 float,然后再转换为 int:
>>> int(float("34.54545"))
34
或pandas具体:
df.astype(float).astype(int)
在你的情况下,
data.Population1 = pd.to_numeric(data.Population1, errors="coerce")
'data' 是父对象。
之后,你也可以将float转换为int
data.Population1.astype(int)
对我来说,情况有点不同。
我这样加载我的数据框:
my_converter = {'filename': str, 'revision_id': int}
df = pd.read_csv("my.csv", header=0, sep="\t", converters=my_converter)
因为 head -n 3 my.csv
看起来像这样:
"filename" "revision_id"
"some_filename.pdf" "224"
"another_filename.pdf" "128"
然而,向下几千行,有这样一个条目:
"very_\"special\"_filename.pdf" "46"
这意味着我必须为 read_csv()
指定转义字符。否则,它会尝试将 special
转换为 int
用于 revision_id
字段并生成错误。
所以正确的做法是:
df = pd.read_csv("my.csv", header=0, sep="\t", escapechar='\', converters=my_converter)