我有一个数据框,其列值用逗号分隔。我想从这些值中删除某些值。
我的数据框如下:
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()
我无法解决我的问题-帮助我对其进行排序。
答案 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']]))