当前位置: 首页 > 知识库问答 >
问题:

您可以将熊猫df.str.replace()函数用于多个值吗?

商和颂
2023-03-14

我正在使用pandasdf.str.replace()函数,希望从字符串中删除多个字符。

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

2 8/20/2019犹他谷大学犹他谷本科UVU PMT 1 908191 4825.50

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

如果可能的话,我想同时删除“$”,“”字符。

共有2个答案

阎宝
2023-03-14

去偷政治学家的评论,并用一点解释来回答。

使用一些虚假数据:

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

我们的< code >金额列中有< code>$和< code >,。使用

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告诉代码将字符串读取为“原始”
  • \$说要寻找美元符号
  • |
  • 的符号
  • \,说要查找逗号

在< code>\$和< code>\,之间使用< code>|(不带空格!)意味着查找其中一个,并用方法中第二个参数中的内容替换它们(也称为< code>repl)

下面是我发现的一个备忘单,它解释了其他正则表达式字符以及如何使用它们:正则表达式教程-示例快速备忘单

赵炯
2023-03-14

冒昧地从@Ian借用DataFrame

还有另一种方法可以使用替换方法,并使用ng替换使用cript方法替换列中的多个值。

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

它将简单地删除<code>$

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

只需使用< code>astype将值转换为float..

>>> 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
 类似资料:
  • 问题内容: 我有一个熊猫DataFrame,其中包含多个列: 我想基于对数据框的每一行应用一个函数为此数据框创建两个新列。我不想多次调用该函数(例如,通过执行两次单独的调用),因为它占用大量计算资源。我尝试通过两种方式来执行此操作,但它们都不起作用: 使用: 我编写了一个函数,该函数接受a并返回我想要的值的元组: 尝试将此应用于DataFrame会出现错误: 然后,我将使用此问题中显示的方法将从返

  • 问题内容: 我正在使用以下df: 我想在所有年份中强制使用数字: 有没有简单的方法可以做到这一点,还是我必须全部输入? 问题答案: 更新: 您以后不需要转换值,可以在读取CSV时 即时 进行: 如果您需要将多列转换为数字dtypes,请使用以下技术: 样本来源DF: 将选定的列转换为数字dtypes: PS,如果要选择 所有 ()列,请使用以下简单技巧:

  • 我有两个数据帧,是位置的位置,是站点的位置。我正试图找到一种更有效的方法来应用距离函数来查找在特定范围内的站点并返回站点名称。如果距离函数是纬度差,这是我的预期结果: 我有一个解决方案,使用笛卡尔产品/交叉连接在单个数据帧上应用一个函数。这个解决方案是可行的,但是我在一个真正的数据集中有数百万行,这使得笛卡尔产品非常慢。 我还尝试了使用的循环方法,但这比交叉连接方法慢。是否有一种更为通灵/高效的方

  • 有人能解释一下为什么这个代码不起作用吗? 它返回错误:TypeError:(“'NoneType'对象不可调用”,“发生在索引0上”)数据帧df在某些单元格中包含一些None值。我的意图是对所有非无值应用函数。

  • 我想通过对两个现有列应用函数,在数据框中创建一个新列。根据这个答案,当我只需要一列作为参数时,我就能够创建一个新列: 但是,当函数需要多个参数时,我不知道如何执行相同的操作。例如,如何通过将列a和列B传递给下面的函数来创建新列?

  • 我经常处理格式不好的数据(即数字字段不一致等) 可能还有其他方法,我不知道,但我格式化数据帧中单个列的方法是使用函数并将该列映射到该函数。 问题:1-如果我有一个包含50列的数据框,并且想要将该格式应用于多个列,等等列1, 3, 5, 7, 9, 你能去吗 ...这样我可以格式化所有的数字列在一行?