繁体   English   中英

Pandas:将DataFrame中的多列由object转为float

[英]Pandas: Convert multiple columns in DataFrame from object to float

为了清理数据,我想将几个应该是数字的列转换为数字。 多列的分配无效。

最小(非)工作示例。 “S”列是字符串,“D”和“L”应转换为数字。 dtypesobject - 正如预期的那样

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_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 期望如何处理多列?

这个对我有用:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM