Pandas数据帧中字符串的条件编辑

2024-03-29 01:58:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学习熊猫,有一个字符串的数据帧,看起来有点像:

df = pd.DataFrame([['Apple', 'Med6g7867'], ['Orange', 'Med7g8976'], ['Banana', 'Signal'], ['Peach', 'Med8g8989'], ['Mango', 'Possible result %gggyy']], columns=['A', 'B'])
df
    A       B
0   Apple   Med6g7867
1   Orange  Med7g8976
2   Banana  Signal
3   Peach   Med8g8989
4   Mango   Possible result %gggyy

注:B列有两种类型的值,一种是MedXgXXXX格式的唯一标识符,另一种是描述性字符串。我想做两件相关的事情。

  1. 将B的所有值替换为NaN的唯一标识符
  2. 保留描述性字符串,但截断任何有%符号的字符串,这样我只保留%符号之前的字符串。在

我想要这样的桌子:

^{pr2}$

目前,我可以将表子集如下:

df[df['B'].str.contains("Med")]
df[df['B'].str.contains("%")]

{cd1>的实现不允许我这样做。

感谢任何帮助。


Tags: 字符串appledfsignal标识符resultbananapeach
2条回答
import pandas as pd
df = pd.DataFrame([['Apple', 'Med6g7867'],
                   ['Orange', 'Med7g8976'],
                   ['Banana', 'Signal'],
                   ['Peach', 'Med8g8989'],
                   ['Mango', 'Possible result %gggyy']],
                  columns=['A', 'B'])

df['B'] = df['B'].str.extract(r'(?:^Med.g.{4})|([^%]+)', expand=False)
print(df)

收益率

^{pr2}$

regex模式具有以下含义:

(?:            # start a non-capturing group
  ^            # match the start of the string
  Med          # match the literal string Med
  .            # followed by any character
  g            # a literal g
  .{4}         # followed by any 4 characters
)              # end the non-capturing group
|              # OR
(              # start a capturing group
  [^%]+        # 1-or-more of any characters except %
)              # end capturing group

如果B列中的值以表单的唯一标识符开头 MedXgXXXX然后将匹配非捕获组。自从str.extract 只返回捕获组的值,返回的Seriesstr.extract在此位置将有一个NaN。在

如果捕获组匹配,则str.extract将返回 匹配值。在

可以按如下方式应用“替换”两次:

In [460]: df
Out[460]: 
        A                       B
0   Apple               Med6g7867
1  Orange               Med7g8976
2  Banana                  Signal
3   Peach               Med8g8989
4   Mango  Possible result %gggyy

In [461]: df.replace(r'Med\dg\d{4}', np.nan, regex=True).replace(r'\s+%.*', '', regex=True)
Out[461]: 
        A                B
0   Apple              NaN
1  Orange              NaN
2  Banana           Signal
3   Peach              NaN
4   Mango  Possible result

相关问题 更多 >