python - 无法更改数据框中的数据类型

标签 python pandas

我有一个数据框 df 如下所示:

        birth_year  person
    0       1980         0
    1       1981         1
    2       1982         2
    3       1983         3
    4       1984         4

birth_year 列看起来像数字,但是当我检查数据类型时 df['birth_year'].dtype 结果为 dtype('O')

所以我认为它实际上可能是一个字符串,并尝试使用 df['birth_year'].astype('int') 将其转换为数字,但出现错误:

    UnicodeEncodeError: 'decimal' codec can't encode characters in position 
    0-3: invalid decimal Unicode string

经过一些谷歌搜索后,我开始明白(可能是错误的)其中似乎有一些不可见的字符。当访问值 df['birth_year'][0] 时,我得到的值是 1980L,而不是 1980

那么数据类型到底是什么,如何将其转换为整数?我在某处读到,如果返回的数据类型是dtype('O'),通常意味着它是一个字符串,但似乎并非如此。

最佳答案

您可以使用 df['birth_year'].astype(int) 正常转换,但似乎您有无效值,使用 df = df.convert_objects(convert_numeric=True) 会将无效值强制转换为 NaN,这可能是您想要的,也可能不是您想要的,因为这会将 dtype 更改为 float64 而不是 int64

最好查看无效的字符串值以确定它们无法转换的原因。

因此您可以执行 df[df.convert_objects(convert_numeric).isnull()] 来获取具有无效 'birth_year' 值的行

关于python - 无法更改数据框中的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31922633/

相关文章:

python - 如何让 Python jsonpickle 递归工作?

python - 为什么在同一行中创建的两个对象具有相同的对象,但这与列表不同?

python - 在 Python 中跨多列应用 str.contains 时出现问题

python - 计算多列中每个唯一行的字符串出现次数

python - Pandas/Python 过滤 DF 的列值

sql - 计算 pandas 数据框中的不同值

python - 在我的表单中使用MultipleFileField()时,FileRequiredValidator()不起作用

python - pickle.load(p) 与 pickle.load(urllib.open(link)) 之间的区别

python - SymPy 1.0 中的集成错误

python - 根据另一列向日期添加一天