首页 > 解决方案 > 删除熊猫数据框中每个单元格的一部分

问题描述

我有这个数据框:

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

标签: pythonpandas

解决方案


使用访问器获取每个元素的前三个字符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

推荐阅读