所以我有一个包含字符串、整数和浮点数的数据框。总而言之,它看起来像这样:
日期 | 第 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 栏 | 第 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' 条件
如有任何帮助,我们将不胜感激!
尝试 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)