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

时间:2015-08-10 14:47:02

标签: 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'),通常意味着它是一个字符串,但事实并非如此。

1 个答案:

答案 0 :(得分:2)

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

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

因此,您可以df[df.convert_objects(convert_numeric).isnull()]获取无效' birth_year'值