python - 删除熊猫数据框中每个单元格的一部分
问题描述
我有这个数据框:
CHROM POS ID 162014 162015 162016
1 1645 M1 0|1:0.96 0|0:0 0|0:0.33
1 23253 M3 1|1:1.97 0|0:0 0|0:0.33
1 29491 M4 1|1:1.97 0|0:0 0|0:0.33
1 30698 M6 0|0:0.03 1|0:1 1|1:1.67
1 43616 M9 0|0:0.03 1|1:2 1|1:1.67
1 53188 M11 1|1:1.97 0|0:0 0|0:0.33
1 53632 M12 1|1:1.97 0|0:0 0|0:0.33
1 57628 M13 1|1:1.97 0|0:0 0|0:0.33
1 59879 M14 0|0:0.03 1|1:2 1|1:1.67
1 64576 M15 0|0:0.03 1|1:2 1|1:1.67
我想知道,如何删除除 ID、#CHR 和 Pandas 中的 POS 列之外的所有列中 0|0、0|1、1|0 和 1|1 之后的所有字符和数字,与此表相同;
#CHROM POS ID 162014 162015 162016
1 1645 M1 0|1 0|0 0|0
1 23253 M3 1|1 0|0 0|0
1 29491 M4 1|1 0|0 0|0
1 30698 M6 0|0 1|0 1|1
1 43616 M9 0|0 1|1 1|1
1 53188 M11 1|1 0|0 0|0
1 53632 M12 1|1 0|0 0|0
1 57628 M13 1|1 0|0 0|0
1 59879 M14 0|0 1|1 1|1
1 64576 M15 0|0 1|1 1|1
解决方案
使用访问器获取每个元素的前三个字符str
。
>>> df.iloc[:, 3:] = df.iloc[:, 3:].apply(lambda s: s.str[:3])
>>> df
CHROM POS ID 162014 162015 162016
0 1 1645 M1 0|1 0|0 0|0
1 1 23253 M3 1|1 0|0 0|0
2 1 29491 M4 1|1 0|0 0|0
3 1 30698 M6 0|0 1|0 1|1
4 1 43616 M9 0|0 1|1 1|1
5 1 53188 M11 1|1 0|0 0|0
6 1 53632 M12 1|1 0|0 0|0
7 1 57628 M13 1|1 0|0 0|0
8 1 59879 M14 0|0 1|1 1|1
9 1 64576 M15 0|0 1|1 1|1
推荐阅读
- javascript - 浏览器源代码中是否嵌入了Web API(如EventTarget、DOM)的实现?
- python - 无法从 Python 中的子目录导入 *
- list - 对嵌套列表进行排序
- ios - 如何删除文本的一部分
- python - 将键盘挂钩附加到特定窗口
- sql - 如何在 tsql 中选择具有某些行优先级的随机行
- mysql - 从 SQL (Laravel) 检索 JSON 格式数组时遇到问题
- javascript - 当我检查值是否在前一行中定义时,为什么 Typescript 会抱怨可能的未定义值?
- python - 接受1个可迭代参数并将所有对象添加到列表中的函数(如果它们是int或float)?
- javascript - 在 Express 应用程序中添加参数时出现 CORS 错误