python - Pandas 删除逗号分隔的列值中的特定 int 值
问题描述
我有一个数据框,其列值用逗号分隔。我想从这些值中删除某些值。
我的数据框如下所示:
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()
我无法解决我的问题 - 帮我整理一下。
解决方案
使用具有指定值的列表推导在列表中删除:
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]
推荐阅读
- swiftui - 从枚举创建列表
- android - 如何设置数据类的默认值
- javascript - 将数组从 CSV 导入 Firestore
- java - java中的骰子总和应用程序。我得到了索引错误,我设计了错误的代码,但我不知道在哪里
- python - 将数组乘以列表作为点积
- java - 在拆分 String() 时插入 Kotlins ${ } 表达式,以便在拆分后添加动态数据
- javascript - 如何返回一个显示每个唯一值出现总数的对象?
- sql - 在同一 SQL 行上多次使用 CAST 或 CONVERT 子句
- c - 为什么“Crafting Interpreters”解析器的解析规则表中不包含某些前缀和中缀运算符?
- c++ - C++ 需要所有声明的类型说明符和预期的非限定 ID(需要调试帮助)