如何选择包含特定字符串和数字的单元格?

问题描述 投票:0回答:1

所以我有一个包含字符串、整数和浮点数的数据框。总而言之,它看起来像这样:

日期 第 1 栏 第 2 栏 第 3 栏 第 3 栏 第 4 栏 第 5 栏 第 6 栏
09/2023 181.70 17.70 / 22.22 14.40 109.00 NaN 6 0 / 新台币
06/2023 143.60 17.00 15.30 190.05 NaN 6 / 11.41 1
03/2023 5 / 18.68 NC / 17.67 NC / 30.02 NaN NaN 5/新台币 NC / 2

对于每一行,我尝试应用 3 个条件:

  1. 如果单元格包含数字/数字,请将其替换为同一 df 中的文本“Division”
  2. 如果单元格包含 NC / 数字,请在同一 df 中将其替换为文本“无更改”
  3. 如果单元格包含 数字 / NTD,请在同一 df 中将其替换为文本“No ToDo's”

请注意,所有内容都将位于同一个数据框中,这只是更改代码必须检测的条件的文本。也就是说,这应该是预期的输出:

日期 第 1 栏 第 2 栏 第 3 栏 第 3 栏 第 4 栏 第 5 栏 第 6 栏
09/2023 181.70 部门 14.40 109.00 NaN 6 没有待办事项
06/2023 143.60 17.00 15.30 190.05 NaN 部门 1
03/2023 部门 没有变化 没有变化 NaN NaN 没有待办事项 没有变化

我对其中之一的尝试(条件#2):

 for k in range(0, df.shape[1]):>   
             for m,p in enumerate(df[df.columns[(k)]]):  
                    if (p == ("<NC> / ")):
                         df[df.columns[k]][m] = df[df.columns[k]][m].replace(p, 'No changes')

类似地,我将上面的代码应用于“

number / NTD
”(条件#3)并且似乎做得很好,但是,条件#1有点复杂,因为它需要是第一个在代码(不在 if 条件的 else 部分) 并且我不知道如何对 '/' 之前和之后的任何数字应用 'if' 条件

如有任何帮助,我们将不胜感激!

python pandas dataframe if-statement conditional-statements
1个回答
0
投票

尝试 Pandas 的 正则表达式匹配

np.select
:

pattern1 = df.apply(lambda column: column.str.match(r'([0-9\.]+)\s*/ ([0-9\.]+)'))
pattern2 = df.apply(lambda column: column.str.match(r'NC\s*/ ([0-9\.]+)'))
pattern3 = df.apply(lambda column: column.str.match(r'([0-9\.]+)\s*/ NTD'))

df = pd.DataFrame(np.select([pattern1, pattern2, pattern3], 
                            ['Division', 'No Change', 'No ToDo\'s'], df), 
                  columns=df.columns, index=df.index)
© www.soinside.com 2019 - 2024. All rights reserved.