我有一个带有浮点数和NaN的列的数据框。
那些是电话号码,它们看起来像浮子一样奇怪(它最终会得到一个" .0"电话号码看起来像5551981180099.0)。我尝试使用df['phone'].astype(int)
来解决这个问题,但是它遇到了NaNs,我得到了一个"无法将NAs转换为int"错误。
所以我用这个去了残酷的力量:
for i in range(len(df.index)):
if pd.isnull(df['phone'][i]) == False:
df['phobe'][i] = int(df['phone'][i])
但当我print(type(df['phone'][i]))
时,它告诉我它仍然是class 'numpy.float64'
。
我尝试了将所有内容转换为其他内容以使电话号码看起来不错(转换为字符串并取出最后两个字符,应用astype(str),astype(int)等)但似乎没有任何效果。
有什么建议吗?
答案 0 :(得分:1)
如果您的NaN
值为int
,则按设计,所有值都会转换为float
s。
您可以将NaN
替换为某些int
,然后将列转换为int
。
df['phone'] = df['phone'].fillna(0).astype(int)
首先删除NaN
行:
df = df.dropna(subset=['phone'])
df['phone'] = df['phone'].astype(int)
或者将所有值替换为str
然后删除.0
,然后获取字符串NaN
(不会丢失值):
df['phone'] = df['phone'].astype(str).str.replace('\.0', '')
最后如果需要删除最后2个字符,请使用indexing with str:
df['phone'] = df['phone'].astype(str).str.replace('\.0', '').str[:-2]