熊猫删除逗号分隔的列值中的特定int值

时间:2020-05-17 08:23:01

标签: python pandas

我有一个数据框,其列值用逗号分隔。我想从这些值中删除某些值。

我的数据框如下:

  col1             col2  
0,1,0,2,30,10,20  0,0,2,3,10,20
0,0,0,1,0,210,30  0,0,20,20,20,0,0,0

我想从列中删除0,1,2

输出应为:

 col1             col2                new_col1  new_col2
0,1,0,2,30,10,20  0,0,2,3,10,20       30,10,20   3,10,20
0,0,0,1,0,210,30  0,0,20,20,20,0,0,0   210,30    20,20,20

我尝试了

def mysub(r):

     lst = [float(a) for a in r.split(',') if a != '0' and a != '' and  a != "1" and  a != "2"]
     return lst
df['new_col1']=df[df['col1']].mysub()

我无法解决我的问题-帮助我对其进行排序。

2 个答案:

答案 0 :(得分:1)

将具有指定值的列表理解用于列表中的删除:

def mysub(r):
    return [','.join(z for z in str(y).split(',') 
            if z not in ['0','1','2']) for y in r]
df = df.apply(mysub)
print (df)
       col1      col2
0  30,10,20   3,10,20
1    210,30  20,20,20

对于新列:

def mysub(r):
    return [','.join(z for z in str(y).split(',') 
            if z not in ['0','1','2']) for y in r]
df = df.join(df.apply(mysub).add_prefix('new_'))
print (df)
               col1                col2  new_col1  new_col2
0  0,1,0,2,30,10,20       0,0,2,3,10,20  30,10,20   3,10,20
1  0,0,0,1,0,210,30  0,0,20,20,20,0,0,0    210,30  20,20,20

如果要浮动输出:

def mysub(r):
    return [[float(z) for z in str(y).split(',') 
            if z not in ['0','1','2']] for y in r]
df = df.join(df.apply(mysub).add_prefix('new_'))
print (df)
               col1                col2            new_col1  \
0  0,1,0,2,30,10,20       0,0,2,3,10,20  [30.0, 10.0, 20.0]   
1  0,0,0,1,0,210,30  0,0,20,20,20,0,0,0       [210.0, 30.0]   

             new_col2  
0   [3.0, 10.0, 20.0]  
1  [20.0, 20.0, 20.0]  

答案 1 :(得分:0)

df.applymap(lambda x: ','.join([e for e in x.split(',') if e not in ['0','1','2']]))