1

我有一个 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 ...

所有这些与正则表达式确认的列都需要被选中,并且它们的数据类型需要从对象更改为浮点数。特别是,列看起来像 p_d_d_c* 和 p_d_d_g* 它们都是object类型,我想将它们更改为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'

我的熊猫版本是1.0.1

那么,如何批量选择列并使用正则表达式更改其数据类型?

4

2 回答 2

3

来自同一个链接,并带有一些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)
于 2020-07-21T10:57:53.890 回答
3

试试这个:

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)
于 2020-07-21T11:01:09.693 回答