我有很多行,很多列数据框都有不同的'占位符'需要替换的值(在列的子集中)。我已经在论坛中使用嵌套列表或词典阅读了很多例子,但是却没有幸运的变化......
# A test dataframe
df = pd.DataFrame({'Sample':['alpha','beta','gamma','delta','epsilon'],
'element1':[1,-0.01,-5000,1,-2000],
'element2':[1,1,1,-5000,2],
'element3':[-5000,1,1,-0.02,2]})
# List of headings containing values to replace
headings = ['element1', 'element2', 'element3']
我正在努力做这样的事情(显然这不起作用):
# If any rows have value <-1, NaN
df[headings].replace(df[headings < -1], np.nan)
# If a value is between -1 and 0, make a replacement
df[headings].replace(df[headings < 0 & headings > -1], 0.05)
那么,是否有更好的方法可以使用循环或花哨的熊猫技巧来实现这一目标?
答案 0 :(得分:3)
您可以将Sample
列设置为索引,然后根据条件替换整个数据框中的值:
df = df.set_index('Sample')
df[df < -1] = np.nan
df[(df < 0) & (df > -1)] = 0.05
给出了:
# element1 element2 element3
# Sample
# alpha 1.00 1.0 NaN
# beta 0.05 1.0 1.00
# gamma NaN 1.0 1.00
# delta 1.00 NaN 0.05
# epsilon NaN 2.0 2.00
答案 1 :(得分:1)
以下是@Psidom建议的成功答案。
解决方案涉及从数据帧中取出一个切片,应用该函数,然后重新合并修改后的切片:
df1 = df.loc[:, headings]
df1[df1 < -1] = np.nan
df1[(df1 < 0)] = 0.05
df.loc[:, headings] = df1