我想从末尾包含 * 的值中删除 *,比如从列中删除 20*、30*

I want to remove * from values containing * at the end say 20*, 30* from a column

我有一个包含列中值的数据框:

df = pd.DataFrame({
    'A': ['20*', 40, '30*' ],
    'B': ['abc', 'bar', 'xyz'],
})

我想删除 A 列中的 *,结果应该是:['20', 40, '30' ]

如何实现?

str.rstripfillna 一起使用,请注意您的列 A 是包含字符串和 int 的对象,这就是为什么 str.rstrip 将 return NaN on int cell ,那么我们只需要使用 fillna 填充它

df.A=df.A.str.rstrip('*').fillna(df.A)

使用正则表达式这行得通:

import pandas as pd

df = pd.DataFrame({'A': ['20*', 40, '30*' ], 'B': ['abc', 'bar', 'xyz']})
df.replace({'A': {r'(\d+)\*': r''}}, regex=True, inplace=True)

print(df)

括号(\d+)是一个capturing group the contained \d+ checks for strings that are made up of either a single digit or more. </code> is a <a href="https://www.regular-expressions.info/backref.html" rel="nofollow noreferrer">backreference</a>,它访问的是前面括号定义的第一个捕获组。</p> <p>第一个正则表达式基本上是这样写的:查找所有由至少一个数字组成且尾随 <code>* 的字符串(在正则表达式中转义为 \*,因为仅 *匹配零个或多个前面的字符)。

第二个意思是:使用之前捕获的数字并粘贴它们。您可以将第二个正则表达式修改为类似 r'AB 的内容,以更好地理解这意味着什么。