Pandas:将DataFrame中的多个列从对象转换为浮点

chhkpiq4  于 2023-01-19  发布在  其他
关注(0)|答案(2)|浏览(199)

为了清理数据,我想将几个应该是数值的列转换为数值。指定多个列无效。
最小(非)工作示例。列"S"是字符串,"D"和"L"应转换为数值。dtypesobject-如预期
(一)

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_numericastype(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希望如何处理多列?
wz8daaqr

wz8daaqr1#

去掉位置和行拼接:x"D“,”L“ = x”D“,”L“.应用(pd.to_numeric)

kmpatx3s

kmpatx3s2#

这一个适合我:

x[['D', 'L']] = x[['D', 'L']].astype(float)

相关问题