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

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

我有一个熊猫数据帧,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
如何删除小数点及其后的数字,使数据框如下所示:

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不必要。