【问题标题】:Pandas Dataframe: Replace charactere conditionallyPandas Dataframe:有条件地替换字符
【发布时间】:2019-04-08 03:17:18
【问题描述】:

我有一个数据框,其中有一列名为“Size”。此列有一些包含 android 应用程序列表大小的值。

Size
8.7M
68M
2M

我需要将这些值替换为:

Size:
8700000
68000000
...

我想到了一个函数来验证字符串 '.' 上是否有一个点。如果存在,请将 M 值更改为五个零 (00000)。如果不是,请将 M 值更改为六个零 (000000)。你们能帮我吗?

【问题讨论】:

    标签: python pandas jupyter-notebook jupyter


    【解决方案1】:

    多单元替换的通用解决方案:

    #dict for replace
    _prefix = {'k': 1e3,    # kilo
               'M': 1e6,    # mega
               'B': 1e9,    # giga
    }
    #all keys of dict separated by | (or)
    k = '|'.join(_prefix.keys())
    #extract values to new df
    df1 = df['Size'].str.extract('(?P<a>[0-9.]*)(?P<b>' + k +')*', expand=True)
    #convert numeric column to float
    df1.a = df1.a.astype(float)
    #map values by dictionary, replace NaN (no prefix) to 1
    df1.b = df1.b.map(_prefix).fillna(1)
    #multiple columns together
    df['Size'] = df1.a.mul(df1.b).astype(int)
    print (df)
           Size
    0   8700000
    1  68000000
    2   2000000
    

    如果只想替换M 解决方案应该简化:

    df['Size'] = df['Size'].str.replace('M', '').astype(float).mul(1e6).astype(int)
    print (df)
           Size
    0   8700000
    1  68000000
    2   2000000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 2020-07-18
      • 2018-09-26
      • 2014-03-03
      相关资源
      最近更新 更多