[英]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.