为了清理数据,我想将几个应该是数值的列转换为数值。指定多个列无效。
最小(非)工作示例。列"S"是字符串,"D"和"L"应转换为数值。dtypes
是object
-如预期
(一)
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希望如何处理多列?
2条答案
按热度按时间wz8daaqr1#
去掉位置和行拼接:x"D“,”L“ = x”D“,”L“.应用(pd.to_numeric)
kmpatx3s2#
这一个适合我: