python替换数据帧pandas中所有列的多个值

问题描述

社区!提前致谢。我是维克多,下面是我的表格示例的链接

DataFrame

下面是表格的代码

d = {'1978': ['10k','20000'],'1979': ['30k','2M'],'1980': ['60000','20k'],'1981': ['10000','1M'],'1982': ['15000','70k'],'1983': ['12k','8M']}
df = pd.DataFrame(data=d)

实际上,我正在工作的那个有 60 列和 200 行。但是,它的结构相同。

我的目标是将多列的所有行的“k”替换为“000”,将“M”替换为“000000”。

所以输出应该是:

Expected DataFrame

我很挣扎,尝试了很多东西。我真的被困住了。

如果有人可以与我分享代码以获得所需的输出,我将不胜感激。再次感谢社区! :)

解决方法

您可以将 pandas.DataFrame.replace 与字典一起用作参数和 regex=True

new_df = df.replace({'k':'000',"M": "000000"},regex=True)
,

嗨,一个快速的解决方案是将列转换为字符串,进行字符替换,然后再转换回 int 或 float。这可以逐列完成:

import pandas as pd

d = {'1978': ['10k','20000'],'1979': ['30k','2M'],'1980': ['60000','20k'],'1981': ['10000','1M'],'1982': ['15000','70k'],'1983': ['12k','8M']}
df = pd.DataFrame(data=d)
for col in df.columns:
    df[col] = (
        df[col].astype(str)
        .str.replace("k","000")
        .str.replace("M","000000")
        .astype(int)
    )

或整体:

df = (
   df.astype(str)
   .str.replace("k","000")
   .str.replace("M","000000")
   .astype(int)
)