我有一个pandas数据框,df,如下所示:
ENSGid IB-7645 FB-AAPZ FB-AAQ1 2J-AABH
ENSG00000242268.2 3593.368439 2147.028513 0 2586.98327
ENSG00000270112.3 0 0 104.0612396 89.73803605
ENSG00000167578.15 48710.20691 80149.55054 84261.08439 114534.9553
ENSG00000273842.1 0 0 0 0
ENSG00000078237.5 99587.29996 91523.92632 91066.1147 72151.84485
ENSG00000146083.10 247691.6483 350932.9484 254480.9342 374328.7091
如何删除它们后面的小数点和数字,以便数据框如下所示:
ENSGid IB-7645 FB-AAPZ FB-AAQ1 2J-AABH
ENSG00000242268 3593.368439 2147.028513 0 2586.98327
ENSG00000270112 0 0 104.0612396 89.73803605
ENSG00000167578 48710.20691 80149.55054 84261.08439 114534.9553
ENSG00000273842 0 0 0 0
ENSG00000078237 99587.29996 91523.92632 91066.1147 72151.84485
ENSG00000146083 247691.6483 350932.9484 254480.9342 374328.7091
我已经阅读了pandas cookbook并在stackoverflow中搜索了答案,但所有的答案都是浮动到整数而不是字符串。
所有人都非常感谢。
答案 0 :(得分:1)
您可以使用split
>>> df['ENSGid'] = df['ENSGid'].apply(lambda x: x.split('.')[0])
'ENSG00000242268'
'ENSG00000270112'
...
答案 1 :(得分:0)
您还可以使用lambda函数对具有指定条件的每个元素进行应用
df['ENSGid'] = df['ENSGid'].apply(lambda x:x.split(".")[0] if "." in x)
答案 2 :(得分:0)
如果这是您的数据框:
In [10]: df
Out[10]:
ENSGid IB-7645 FB-AAPZ FB-AAQ1 \
0 ENSG00000242268.2 3593.368439 2147.028513 0.00000
1 ENSG00000270112.3 0.000000 0.000000 104.06124
2 ENSG00000167578.15 48710.206910 80149.550540 84261.08439
3 ENSG00000273842.1 0.000000 0.000000 0.00000
4 ENSG00000078237.5 99587.299960 91523.926320 91066.11470
5 ENSG00000146083.10 247691.648300 350932.948400 254480.93420
2J-AABH
0 2586.983270
1 89.738036
2 114534.955300
3 0.000000
4 72151.844850
5 374328.709100
然后,您可以通过访问数据框对象中的.str
属性来使用字符串方法。 str.replace
方法接受正则表达式:
In [11]: df['ENSGid'].str.replace(r'\.\d*','')
Out[11]:
0 ENSG00000242268
1 ENSG00000270112
2 ENSG00000167578
3 ENSG00000273842
4 ENSG00000078237
5 ENSG00000146083
Name: ENSGid, dtype: object
所以,替代:
In [13]: df['ENSGid'] = df['ENSGid'].str.replace(r'\.\d*','')
In [14]: df
Out[14]:
ENSGid IB-7645 FB-AAPZ FB-AAQ1 2J-AABH
0 ENSG00000242268 3593.368439 2147.028513 0.00000 2586.983270
1 ENSG00000270112 0.000000 0.000000 104.06124 89.738036
2 ENSG00000167578 48710.206910 80149.550540 84261.08439 114534.955300
3 ENSG00000273842 0.000000 0.000000 0.00000 0.000000
4 ENSG00000078237 99587.299960 91523.926320 91066.11470 72151.844850
5 ENSG00000146083 247691.648300 350932.948400 254480.93420 374328.709100
答案 3 :(得分:0)
以下所有答案都是正确的,抱歉只标记一个是正确的。
1. df['ENSGid']=df['ENSGid'].str.split('.').str[0]
2. df['ENSGid'] = df['ENSGid'].apply(lambda x: x.split('.')[0])
3. df['ENSGid'] = df['ENSGid'].str.replace(r'\.\d*','')
谢谢你,@ juanpa.arrivillaga,@ kashkarothiya,@ Rob,@ Eliethesaiyan