【问题标题】:Convert dataframe columns of object type to float将对象类型的数据框列转换为浮点数
【发布时间】:2018-12-09 17:10:29
【问题描述】:

我想将我的数据框的所有非浮点类型列转换为浮点,有什么方法可以做到吗?如果我可以一次性完成,那就太好了。 下面是类型

longitude          -    float64 
latitude          -     float64
housing_median_age   -  float64
total_rooms          -  float64
total_bedrooms       -   object
population           -  float64
households            - float64
median_income         - float64
rooms_per_household   - float64
category_<1H OCEAN    -   uint8
category_INLAND        -  uint8
category_ISLAND        -  uint8
category_NEAR BAY     -   uint8
category_NEAR OCEAN    -  uint8

下面是我的代码的sn-p

import pandas as pd
import numpy as np 
from sklearn.model_selection import KFold

df = pd.DataFrame(housing)
df['ocean_proximity'] = pd.Categorical(df['ocean_proximity']) #type casting 
dfDummies = pd.get_dummies(df['ocean_proximity'], prefix = 'category' )
df = pd.concat([df, dfDummies], axis=1)
print df.head()
housingdata = df
hf = housingdata.drop(['median_house_value','ocean_proximity'], axis=1)
hl = housingdata[['median_house_value']]
hf.fillna(hf.mean,inplace = True)
hl.fillna(hf.mean,inplace = True)

【问题讨论】:

标签: python pandas machine-learning


【解决方案1】:

枚举转换为数字并插入新的数据帧

New_DataFrame = pd.DataFrame()
x = {New_DataFrame.insert(i, name, pd.to_numeric(df[name], errors = "coerce"), True) if(df[name].dtype.name=='object') else New_DataFrame.insert(i, name, df[name], True) for i, name in enumerate(df.columns)}
print(New_DataFrame.head())`

【讨论】:

  • downcast='float' 为您需要的类型添加
【解决方案2】:

如果您不需要对向下转换或错误处理进行特定控制,一种快速简便的方法是使用df = df.astype(float)

如需更多控制,您可以使用 pd.DataFrame.select_dtypes 按 dtype 选择列。然后在列的子集上使用pd.to_numeric

设置

df = pd.DataFrame([['656', 341.341, 4535],
                   ['545', 4325.132, 562]],
                  columns=['col1', 'col2', 'col3'])

print(df.dtypes)

col1     object
col2    float64
col3      int64
dtype: object

解决方案

cols = df.select_dtypes(exclude=['float']).columns

df[cols] = df[cols].apply(pd.to_numeric, downcast='float', errors='coerce')

结果

print(df.dtypes)

col1    float32
col2    float64
col3    float32
dtype: object

print(df)

    col1      col2    col3
0  656.0   341.341  4535.0
1  545.0  4325.132   562.0

【讨论】:

  • 感谢您的帮助,但我试过了,它没有改变。
  • cols = hf.select_dtypes(exclude=['float']).columns ///// hf[cols] = hf[cols].apply(pd.to_numeric, downcast='float' , errors='coerce')
  • 为什么不只是df.astype(float) ?? @jpp
  • @pyd,这也可以,我已经更新了这个建议。 pd.to_numeric 有更多的控制权,您可以在可能的情况下进行向下转换,并可以指定发生错误的情况。
  • 你能用你的实际df和预期df创建一个新问题吗
猜你喜欢
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多