【问题标题】:Can you use the pandas df.str.replace() function for multiple values?您可以将 pandas df.str.replace() 函数用于多个值吗?
【发布时间】:2019-08-25 15:31:29
【问题描述】:

我正在使用 pandas df.str.replace() 函数并想从字符串中删除多个字符。

我正在尝试使用pandas 清理 CSV 文件中的一些交易数据。我有一列将交易金额存储为Object 数据类型。在将其更改为float 数据类型之前,我需要从大于999.99 的数字中删除$ 字符和任何, 字符。我已经能够一次做到这一点;但是,我想知道是否可以传入多个值来清理它。

2 2019 年 8 月 20 日犹他谷大学 UTAH VALLEY UNIV UVU PMT 1 908191 4,825.50

df['Amount'] = df['Amount'].str.replace(r',','').astype(float)

如果可能,我想同时删除 '$'',' 字符。

【问题讨论】:

  • df['Amount'] = df['Amount'].str.replace(r'\$|\,', '').astype(float)?
  • 亲爱的@drewipson,您可以选择下面给出的答案,或者如果需要进一步评论。

标签: python-3.x string pandas


【解决方案1】:

冒昧向@Ian借用DataFrame>

还有另一种方法可以使用replace 方法和replace 使用dict 方法来替换列中的多个值..

>>> df
    amount
0  $25,000
1  $13,000
2  $65,000
3  $19,000
4  $15,000

它将简单地删除 $ 符号和带有 null '' 值的逗号。

>>> df['amount'].replace({'\$': '', ',': ''}, regex=True)
0    25000
1    13000
2    65000
3    19000
4    15000
Name: amount, dtype: object

只是将值转换为浮点数使用astype..

>>> df['amount'].replace({'\$': '', ',': ''}, regex=True).astype(float)
0    25000.0
1    13000.0
2    65000.0
3    19000.0
4    15000.0
Name: amount, dtype: float64

【讨论】:

    【解决方案2】:

    打算窃取@political 科学家的评论,并通过一点解释将其作为答案。

    使用一些虚假数据:

    import pandas as pd
    import numpy as np
    
    np.random.seed(1)
    
    df = pd.DataFrame(np.random.randint(5, 100, size=(5,)), columns=['amount']).applymap(str)
    
    df.amount = '$' + df.amount + ',' + '000'
    
    print(df)
    
        amount
    0  $42,000
    1  $17,000
    2  $77,000
    3  $14,000
    4  $80,000
    

    我们的amount 列中有$,。使用

    df.amount.str.replace(r'\$|\,', '').astype(float)
    

    我们得到

    0    42000.0
    1    17000.0
    2    77000.0
    3    14000.0
    4    80000.0
    Name: amount, dtype: float64
    

    为什么?默认情况下,.str.replace() 方法具有参数regex=True,这意味着它接受正则表达式进行模式匹配。

    • 字符串前面的r 告诉代码将字符串读取为“原始”
    • \$ 说要找美元符号
    • |or 的符号
    • \, 说要找逗号

    \$\, 之间使用|(没有空格!)意味着查找其中一个并将它们都替换为方法中第二个参数中存在的内容(又名repl

    这是我发现的一份备忘单,它解释了其他正则表达式字符以及如何使用它们:Regex tutorial — A quick cheatsheet by examples

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      相关资源
      最近更新 更多