我有一个数据框 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/