我的数据框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')
,通常意味着它是一个字符串,但事实并非如此。
答案 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'值