Pandas:替换列列表

时间:2016-07-10 04:52:26

标签: python pandas replace

我有很多行,很多列数据框都有不同的'占位符'需要替换的值(在列的子集中)。我已经在论坛中使用嵌套列表或词典阅读了很多例子,但是却没有幸运的变化......

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

那么,是否有更好的方法可以使用循环或花哨的熊猫技巧来实现这一目标?

2 个答案:

答案 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