簡體   English   中英

Python pandas:動態更改未指定列數的值

[英]Python pandas: dynamically change values in unspecified number of columns

我有一個簡單的數據框,可能如下所示:

| 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_1Average BR_10

因此,我希望對列名中包含Average BR_每一列自動進行此更改。

我一直在閱讀有關.loc但我只設法將列值更改為一個全新的值,如下所示:

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

另外,我還沒有能夠在這里實現正則表達式。

我嘗試了一個列表:

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

但我沒有設法用.loc實現這一點。

我想我可以使用循環來做到這一點,但我覺得必須有一些更好的熊貓解決方案,但我想不通。

你能幫我指出正確的方向嗎?

謝謝

# 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%

工作示例

您可以使用df.updatedf.filter

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%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM