python:如何获取小数点之前的字符串?
我有一个熊猫数据帧,df,看起来像这样:python:如何获取小数点之前的字符串?,python,Python,我有一个熊猫数据帧,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
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
如何删除小数点及其后的数字,使数据框如下所示:
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
我读过熊猫食谱,并在stackoverflow中搜索了答案,但所有答案都是针对浮点到整数的,而不是针对字符串的
非常感谢您的帮助。您可以使用split
您还可以使用lambda函数应用于具有指定条件的每个元素
df['ENSGid'] = df['ENSGid'].apply(lambda x:x.split(".")[0] if "." in x)
如果这是您的数据帧:
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
下面的答案都是正确的,对不起,只有一个被标记为正确
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,@akash karothiya,@Rob,@Eliethesaiyan这会将我的所有ENSGid更改为ENSG002268,您需要执行df['ENSGid'][0]。split.'.str[0]而不是。@Rob运行df['ENSGid'][0]。split.'.str[0]给出错误消息:“list'对象没有属性'str'Whoops,我的意思是df['ENSGid'].str'.'。str[0],但我看到答案在这段时间内已经改变了……这与@akash答案完全相同,只是if不必要。