Python:动态更改未指定列数的值

2024-10-04 01:22:16 发布

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

我有一个简单的数据框,可能如下所示:

| Label   | Average BR_1 | Average BR_2 | Average BR_3 | Average BR_4 |
| ------- | ------------ | ------------ | ------------ | ------------ |
| Label 1 | 50           | 30           | 50           | 50           |
| Label 2 | 60           | 20           | 50           | 50           |
| Label 3 | 65           | 50           | 50           | 50           |

我希望能够在每一列中添加一个%符号

我知道我可以为每个专栏做类似的事情:

df['Average BR_1'] = df['Average BR_1'].astype(str) + '%'

然而,问题是,我从一个CSV文件中读取数据,该文件可能包含更多的这些列,因此它可能包含Average BR_1Average BR_4,而不是Average BR_1,也就是说Average BR_10

因此,我希望对每个列名中包含Average BR_的列自动进行此更改

我一直在阅读有关.loc的文章,但我只设法将列值更改为一个全新的值,如下所示:

df.loc[:, ['Average BR_1', 'Average BR_2']] = "Hello"

另外,我还没有在这里实现regex

我试着列出:

colsArr = [c for c in df.columns if 'Average BR_' in c]
print(colsArr)

但是我没有用.loc实现这一点

我想我可以用一个循环来实现这一点,但我觉得肯定有更好的解决方案,但我想不出来

你能帮我指一下正确的方向吗

多谢各位


Tags: 文件csv数据inbrdf符号事情
2条回答

您可以使用^{}^{}

df.update(df.filter(like='Average BR_').astype('str').add('%'))
df

输出:

   Label     Average BR_1   Average BR_2   Average BR_3   Average BR_4
0  Label 1            50%            30%            50%            50%
1  Label 2            60%            20%            50%            50%
2  Label 3            65%            50%            50%            50%
# extract the column names that need to be updated
cols = df.columns[df.columns.str.startswith('Average BR')]

# update the columns
df[cols] = df[cols].astype(str).add('%')

print(df)
     Label Average BR_1 Average BR_2 Average BR_3 Average BR_4
0  Label 1          50%          30%          50%          50%
1  Label 2          60%          20%          50%          50%
2  Label 3          65%          50%          50%          50%

working example

相关问题 更多 >