我有一个大的框架,我想重命名和运行不同的计算的基础上列标签.我的画框是这样的

toy_df = pd.DataFrame(data=np.random.rand(50,8), columns = ('A_distance_km', 'A_costinUSD', 'B_distance_km' ,'B_costinUSD', 'C_distance_km', 'C_costinUSD', 'D_dosomething', 'D_dosomethingelse'))

我编写了这个函数来将所有的距离列转换为米,并将所有的成本美元转换为成本欧元.但我碰上了AttributeError: 'str' object has no attribute 'str'个.你知道我该怎么修吗?

def convert_units(df):
    for col in df.columns:
        if col.str.contains("distance"):
            col = col + '_convert_m'
            df[col] = df[col]*1000
        elif col.str.contains("costinUSD"):
            df[col] = df[col]*0.95
        else:
            return col
    return df

推荐答案

df.columns表示字符串序列(作为列名),这意味着基本的str行为.
要通过一次遍历有 Select 地重命名和重新计算列,请使用以下方法:

def convert_units(df):
    rename_map = {}  # for columns to rename

    for col in df.columns:
        if "distance" in col:
            rename_map[col] = col + '_convert_m'
            df[col] *= 1000
        elif "costinUSD" in col:
            df[col] *= 0.95
    df = df.rename(columns=rename_map)

    return df

toy_df = convert_units(toy_df)
print(toy_df)

   A_distance_km_convert_m  A_costinUSD  B_distance_km_convert_m  B_costinUSD  C_distance_km_convert_m  C_costinUSD  D_dosomething  D_dosomethingelse
0                399.410277     0.127763               944.464091     0.599890               984.958983     0.431538       0.726368           0.603368
1                596.215569     0.834464                99.491461     0.161833               179.692729     0.327060       0.215208           0.288471
2                518.543479     0.451908               613.992588     0.112528               173.772711     0.554944       0.062708           0.019648
3                863.403168     0.469870               773.790350     0.686386               750.875558     0.241806       0.849428           0.988271
4                148.359791     0.832264               366.891421     0.077060               991.598502     0.884995       0.196801           0.302110
5                496.825790     0.509180               997.418855     0.455643               509.158725     0.666080       0.984209           0.915218
...

Python相关问答推荐

FastAPI:使用APIRouter路由子模块功能

脚注在Python中使用regex导致错误匹配

在后台运行的Python函数

如何在不使用字符串的情况下将namedtuple属性传递给方法?

使用imap-tools时错误,其邮箱地址包含域名中的非默认字符

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

如何检测背景有噪的图像中的正方形

Pytest两个具有无限循环和await命令的Deliverc函数

如何使用html从excel中提取条件格式规则列表?

将pandas Dataframe转换为3D numpy矩阵

在Mac上安装ipython

计算每个IP的平均值

在Django admin中自动完成相关字段筛选

当点击tkinter菜单而不是菜单选项时,如何执行命令?

未知依赖项pin—1阻止conda安装""

Python逻辑操作作为Pandas中的条件

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

Python中的变量每次增加超过1

Flask Jinja2如果语句总是计算为false&