簡體   English   中英

將 pandas dataframe 中的列切片中的值替換為基於條件的值

[英]Replace values in a slice of columns in a pandas dataframe with a value based on a condition

我有一個大的 Pandas dataframe,並想根據條件替換列子集中的一些值。

具體來說,我想在第 9 列右側的每一列中將大於 1 的值替換為 1。

因為 dataframe 如此之大,並且隨着時間的推移行數和列數都在增長,所以我無法手動指定要更改值的列的名稱。相反,我只需要指定應檢查第 10 列及更大的列的值> 1。

在查看了許多不同的 Stack Overflow 帖子和 Pandas 文檔后,我嘗試了:

df.iloc[df[:,10: ] > 1] = 1

但是,這給了我錯誤“不可散列的類型:'slice'”。

然后我嘗試了:

df[df.iloc[:, 10:] > 1] = 1

df[df.loc[:, df.columns[10:]] > 1] = 1

根據評論中的 2 條建議,但這兩個都給了我錯誤“無法在具有非 np.nan 值的混合類型上進行就地 boolean 設置”。

有誰知道我為什么會收到這些錯誤和/或我應該對我的代碼進行哪些更改以避免它們?

謝謝!

1. DataFrame.where

我們可以使用iloc到 select 9th列右側的所有列,然后使用where我們可以替換 dataframe 切片中的值,其中條件x.le(1)False

df.iloc[:, 10:] = df.iloc[:, 10:].where(lambda x: x.le(1), 1)

2. DataFrame.clip

或者,我們可以使用clip ,我們可以將upper定義為1 ,它將 dataframe 切片中大於1的所有值分配給1

df.iloc[:, 10:] = df.iloc[:, 10:].clip(upper=1)

暫無
暫無

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

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