簡體   English   中英

按條件替換熊貓數據框列中的值

[英]Replacing values in pandas dataframe columns by criteria

給定兩個示例數據幀:

df0 = pd.DataFrame([('a', 1, 1000), 
                    ('b', 2, 1200), 
                    ('d', 100, 1500)],
                   columns=['L','A','ADA'])

df1 = pd.DataFrame([('a', 1, 2, 1000), 
                    ('b', 2, 100, 1200), 
                    ('d', 100, 2, 1500)], 
                   columns=['L','A','A','ADA'])

如果值大於10我想替換名為A所有列中的值。

片段

df = df0
df.loc[df['A'] > 10, 'A'] = np.nan

完美地工作,而同樣適用於第二個數據幀不起作用

df = df1
df.loc[df['A'] > 10, 'A'] = np.nan

因為df['A']返回兩列。

有什么方法可以處理這兩種情況嗎?

雖然重命名列是一種選擇(我寧願不這樣做),這就是數據的格式(我無法控制),但在實際代碼庫中重命名數據會導致許多問題。 我正在尋找可以處理這種情況的解決方案。

如果有兩列同名是一個問題,熊貓接受這個的原因是什么?

您可以使用numpy.where替換所有duplicate列:

In [2405]: df1
Out[2405]: 
   L    A    A   ADA
0  a    1    2  1000
1  b    2  100  1200
2  d  100    2  1500

In [2405]: import numpy as np

In [2406]: df1.A = np.where(df1.A.gt(10), np.nan, df1.A)

In [2407]: df1
Out[2407]: 
   L    A    A   ADA
0  a  1.0  2.0  1000
1  b  2.0  NaN  1200
2  d  NaN  2.0  1500

如果您想絕對保留重復的列名,請嘗試以下操作。 在這里,我們試圖訪問列的索引,然后對其進行操作。

df = df1
df['A'] = df['A'].astype(float)
df.iloc[:,1].values[df.iloc[:,1] > 10] = np.nan
df.iloc[:,2].values[df.iloc[:,2] > 10] = np.nan

暫無
暫無

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

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