通过正则表达式选择列更改 Pandas 列的数据类型
Change DataTypes of Pandas Columns by selecting columns by regex
我有一个 Pandas 数据框,其中有很多列看起来像 p_d_d_c0、p_d_d_c1、... p_d_d_g1、p_d_d_g2、.. ..
df =
a b c p_d_d_c0 p_d_d_c1 p_d_d_c2 ... p_d_d_g0 p_d_d_g1 ...
所有这些确认正则表达式的列都需要 selected 并且它们的数据类型需要从对象更改为浮点数。特别是,列看起来像 p_d_d_c* 和 p_d_d_g* 它们都是 object
类型,我想将它们更改为 float
类型。有没有办法通过使用正则表达式批量 select 列并将它们更改为 float 类型?
我尝试了 的答案,但由于我有数百个这样的列,因此需要大量时间和内存。
df[df.filter(regex=("p_d_d_.*"))
我也试过:
df.select(lambda col: col.startswith('p_d_d_g'), axis=1)
但是,它给出了一个错误:
AttributeError: 'DataFrame' object has no attribute 'select'
我的Pandas版本是1.0.1
那么,如何批量 select 列并使用正则表达式更改它们的数据类型?
来自同一个 link,并带有一些 astype
魔法。
column_vals = df.columns.map(lambda x: x.startswith("p_d_d_"))
train_temp = df.loc(axis=1)[column_vals]
train_temp = train_temp.astype(float)
编辑:
要修改原始数据框,请执行以下操作:
column_vals = [x for x in df.columns if x.startswith("p_d_d_")]
df[column_vals] = df[column_vals].astype(float)
试试这个:
import pandas as pd
# sample dataframe
df = pd.DataFrame(data={"co1":[1,2,3,4], "co22":[4,3,2,1], "co3":[2,3,2,4], "abc":[5,4,3,2]})
# select all columns which have co in it
floatcols = [col for col in df.columns if "co" in col]
for floatcol in floatcols:
df[floatcol] = df[floatcol].astype(float)
我有一个 Pandas 数据框,其中有很多列看起来像 p_d_d_c0、p_d_d_c1、... p_d_d_g1、p_d_d_g2、.. ..
df =
a b c p_d_d_c0 p_d_d_c1 p_d_d_c2 ... p_d_d_g0 p_d_d_g1 ...
所有这些确认正则表达式的列都需要 selected 并且它们的数据类型需要从对象更改为浮点数。特别是,列看起来像 p_d_d_c* 和 p_d_d_g* 它们都是 object
类型,我想将它们更改为 float
类型。有没有办法通过使用正则表达式批量 select 列并将它们更改为 float 类型?
我尝试了
df[df.filter(regex=("p_d_d_.*"))
我也试过:
df.select(lambda col: col.startswith('p_d_d_g'), axis=1)
但是,它给出了一个错误:
AttributeError: 'DataFrame' object has no attribute 'select'
我的Pandas版本是1.0.1
那么,如何批量 select 列并使用正则表达式更改它们的数据类型?
来自同一个 link,并带有一些 astype
魔法。
column_vals = df.columns.map(lambda x: x.startswith("p_d_d_"))
train_temp = df.loc(axis=1)[column_vals]
train_temp = train_temp.astype(float)
编辑:
要修改原始数据框,请执行以下操作:
column_vals = [x for x in df.columns if x.startswith("p_d_d_")]
df[column_vals] = df[column_vals].astype(float)
试试这个:
import pandas as pd
# sample dataframe
df = pd.DataFrame(data={"co1":[1,2,3,4], "co22":[4,3,2,1], "co3":[2,3,2,4], "abc":[5,4,3,2]})
# select all columns which have co in it
floatcols = [col for col in df.columns if "co" in col]
for floatcol in floatcols:
df[floatcol] = df[floatcol].astype(float)