【问题标题】:Removed unwanted characters from string using pandas [duplicate]使用熊猫从字符串中删除不需要的字符[重复]
【发布时间】:2022-01-24 19:03:50
【问题描述】:

我有以下数据框:

df = pd.DataFrame({'A': ['2.5cm','2.5cm','2.56”','1.38”','2.2”','0.8 in','$18.00','4','2"']})

看起来像:

  A
2.5cm
2.5cm
2.56”
1.38”
2.2”
0.8 in
$18.00
4
2"

我想删除除小数点以外的所有字符。

输出应该是:

 A
2.5
2.5
2.56
1.38
2.2
0.8
18.00
4
2

这是我尝试过的:

df['A'] = df.A.str.replace(r"[a-zA-Z]", '')
df['A'] = df.A.str.replace('\W', '')

但这会删除包括小数点在内的所有内容。

任何建议将不胜感激。

提前谢谢你

【问题讨论】:

  • 按照你的方式怎么样:df.A.str.replace(r"[^\d.]", ""):删除除点之外的任何非数字?
  • 正则表达式中的^ 否定了里面的内容;因此,如果它不是数字也不是文字点,我们将其删除。 regex101.com/r/eIYEin/1.

标签: python python-3.x pandas dataframe


【解决方案1】:

您可以使用str.extract 仅提取浮点数:

df['A'] = df['A'].astype(str).str.extract(r'(\d+.\d+|\d)').astype('float')

但是,'.' 在这里匹配任何字符,而不仅仅是句点。所以它将匹配18,00 而不是18。它也无法提取多位整数。使用下面的代码。 (感谢@DYZ):

df['A'] = df['A'].astype(str).str.extract(r'(\d+\.\d+|\d+)').astype('float')

输出:

       A
0   2.50
1   2.50
2   2.56
3   1.38
4   2.20
5   0.80
6  18.00
7   4.00
8   2.00

【讨论】:

    【解决方案2】:

    试试str.extract

    df['new'] = df.A.str.extract('(\d*\.\d+|\d+)').astype(float).iloc[:,0]
    Out[31]: 
           0
    0   2.50
    1   2.50
    2   2.56
    3   1.38
    4   2.20
    5   0.80
    6  18.00
    

    【讨论】:

    • '(\d*\.\d+|\d+\.?)' 来匹配像 34 这样的数字。(有句点但没有小数部分)。
    猜你喜欢
    • 2015-08-06
    • 1970-01-01
    • 2021-01-13
    • 2016-10-21
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2011-12-24
    相关资源
    最近更新 更多