[英]Pandas: Convert multiple columns in DataFrame from object to float
为了清理数据,我想将几个应该是数字的列转换为数字。 多列的分配无效。
最小(非)工作示例。 “S”列是字符串,“D”和“L”应转换为数字。 dtypes
是object
- 正如预期的那样
1)
x=pd.DataFrame([ ['S',1,5],
['M',1.4,'10'],
['L','2.3',14.5]],
columns=['S', 'D', 'L'])
x.dtypes
S object
D object
L object
dtype: object
我尝试在切片上使用pd.to_numeric
和astype(float)
进行转换。 这是行不通的
x.loc[:, ['D','L'] ] = x.loc[:, ['D', 'L']].apply(pd.to_numeric)
x.dtypes
S object
D object
L object
dtype: object
3 检查:用右侧创建一个新的 dataframe 确实有效并提供正确的类型 (float64)
x.loc[:, ['D', 'L']].apply(pd.to_numeric).dtypes
D float64
L float64
dtype: object
4起作用的是分配一个列。
x.loc[:, 'D' ] = x.loc[:, 'D'].apply(pd.to_numeric)
为“D”列生成正确的类型。
奇怪的是,在对具有更正类型的单列进行赋值后,多列的赋值(如 2 中)有效???
5个
x.loc[:, ['D','L'] ] = x.loc[:, ['D', 'L']].apply(pd.to_numeric)
x.dtypes
S object
D float64
L float64
dtype: object
我不确定它是否与视图和副本有关,但即使在创建深层副本( copy(deep=True)
)时,多列切片的分配也没有效果。
为什么这不起作用? 以及 pandas 期望如何处理多列?
这个对我有用:
x[['D', 'L']] = x[['D', 'L']].astype(float)
去掉 loc 和 row 拼接: x[['D', 'L']] = x[['D', 'L']].apply(pd.to_numeric)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.