Python 将非数字列转换为数字列
我的进口是:Python 将非数字列转换为数字列,python,python-3.x,pandas,dataframe,numpy,Python,Python 3.x,Pandas,Dataframe,Numpy,我的进口是: import pandas as pd import numpy as np from pandas.api.types import is_numeric_dtype 我创建了一个熊猫数据帧(名为df),如下所示: state initial_temp final_temp 0 Cold 48.0 88.1 1 hot 80.7 30.0 2 hot 140.2
import pandas as pd
import numpy as np
from pandas.api.types import is_numeric_dtype
我创建了一个熊猫数据帧(名为df),如下所示:
state initial_temp final_temp
0 Cold 48.0 88.1
1 hot 80.7 30.0
2 hot 140.2 25.0
3 hot 59.8 25.0
4 hot 80.0 25.0
df[["initial_temp", "final_temp"]] = df[["initial_temp", "final_temp"]].astype(float)
所有列都有dtypes对象,但是,唯一应该有该dtype的列是state列。我试图将所有实际数字列(初始和最终温度)转换为数字数据类型,并忽略/省略状态列。这主要是出于教学目的
我目前的尝试是:
def datatype_converter(df):
col_list = []
for column in df.columns:
col_list.append(column)
for i in range(len(col_list)):
if is_numeric_dtype(df[col_list.pop()]):
df.apply(pd.to_numeric, errors = 'coerce') # coerce invalid values to nan.
else:
pass
return df
您可以在适当的列上使用
astype
,如下所示:
state initial_temp final_temp
0 Cold 48.0 88.1
1 hot 80.7 30.0
2 hot 140.2 25.0
3 hot 59.8 25.0
4 hot 80.0 25.0
df[["initial_temp", "final_temp"]] = df[["initial_temp", "final_temp"]].astype(float)
其中,
df
是您的数据帧。当然,这使得假设这些列中的所有值都是数字。这似乎非常复杂。怎么样
target_cols=[col for col for col in df.columns if
是数字类型(df[col])
]
对于目标列中的列:
df.loc[:,col]=pd.to_numeric(df[col])
我相信有一种更明智的方法可以将其简化为一条语句,并避免在列上迭代(而是应用布尔掩码),但这是可读且简洁的。您可以这样做
df.transform(pd.to_numeric, errors = 'ignore')
这是可行的,但是,这不是我真正想要的。我试着假设我不知道有多少列。因此,我正在尝试“自动化流程。非常感谢!”!这有助于提高我的编程技能。然而,这似乎并不能解决问题。所有列仍然是对象。有什么我遗漏/不理解的吗?它对我来说很好,将(在你的例子中)初始温度和最终温度转换为float64数据类型。非常感谢!这有助于提高我的编程技能。然而,这并不是我真正想要的。我试图用一个假设来解决这个问题,即状态栏可能没有一个一致的名称,只是它的内容不是“热”就是“冷”。因此,我试图“自动化”这个过程。@Caesar检查编辑