如何在熊猫中以10为底的错误修复int()的无效文字

Car*_*irl 4 int python-2.7 pandas jupyter-notebook valueerror

每当我尝试将数据框转换为int时,就会出现此错误。

(“以10为底的int()的无效文字:'260,327,021'”,“发生在索引Population1上”

df中的所有内容都是数字。我认为错误是由于末尾的额外引号引起的,但是我该如何解决?

piR*_*red 7

我跑这个

int('260,327,021')
Run Code Online (Sandbox Code Playgroud)

并得到这个

---------------------------------------------------------------------------
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'
Run Code Online (Sandbox Code Playgroud)

我向您保证,并非数据框中的所有内容都是数字。它可能看起来像一个数字,但是它是一个带有逗号的字符串。

您需要替换逗号,然后转到 int

pd.Series(['260,327,021']).str.replace(',', '').astype(int)

0    260327021
dtype: int64
Run Code Online (Sandbox Code Playgroud)


kri*_*ian 7

当字符串是浮点数时,其他人可能会遇到以下问题:

    >>> int("34.54545")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '34.54545'
Run Code Online (Sandbox Code Playgroud)

解决方法是先转换为浮点数,然后再转换为整数:

>>> int(float("34.54545"))
34
Run Code Online (Sandbox Code Playgroud)

或熊猫特定:

df.astype(float).astype(int)
Run Code Online (Sandbox Code Playgroud)


Abh*_*nha 7

我使用pandas.to_numeric解决了错误

就你而言,

data.Population1 = pd.to_numeric(data.Population1, errors="coerce")
Run Code Online (Sandbox Code Playgroud)

“数据”是父对象。

之后,您也可以将 float 转换为 int

data.Population1.astype(int)
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我在值中留有空格的问题。谢谢。我还必须添加 df['series'].fillna(0).astype(int) 又名 .fillna(0) 以消除我的特定问题的 NaN。 (2认同)