如何在pandas中使用base 10错误修复int()的无效文字

时间:2017-05-08 23:11:04

标签: python-2.7 pandas int jupyter-notebook valueerror

这是我尝试将数据帧转换为int时出现的错误。

("基数为10的int()的文字无效:' 260,327,021'",'发生在指数Population1'

df中的所有内容都是一个数字。我假设错误是由于最后的额外引用,但我该如何解决?

4 个答案:

答案 0 :(得分:2)

我跑这个

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

答案 1 :(得分:1)

我使用pandas.to_numeric

解决了错误

就您而言,

data.Population1 = pd.to_numeric(data.Population1, errors="coerce")

“数据”是父对象。

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

data.Population1.astype(int)

答案 2 :(得分:0)

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

    >>> 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

或特定的熊猫:

df.astype(float).astype(int)

答案 3 :(得分:0)

对我来说,情况有点不同。

我这样加载了我的数据框:

class GeneralInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = GeneralInfo
        fields = ["id", "school_name", "address"]

    def create(self, validated_data):
        return GeneralInfo.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.logo = validated_data.get("logo", instance.logo)
        instance.school_name = validated_data.get("school_name", instance.school_name)
        instance.address = validated_data.get("address", instance.address)

因为 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