python:如何在小数点之前获取字符串?

时间:2017-06-01 06:25:12

标签: python

我有一个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中搜索了答案,但所有的答案都是浮动到整数而不是字符串。

所有人都非常感谢。

4 个答案:

答案 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