如何在Dataframe中最后一次出现字符后删除所有内容?

时间:2016-05-28 11:40:52

标签: python python-3.x pandas

我有一个如下所示的数据框DF(这是一个示例):

    EQ1                    EQ2                       EQ3
0   Apple.fruit            Oranage.eatable.fruit     NaN
1   Pear.eatable.fruit     Banana.fruit              NaN
2   Orange.fruit           Tomato.eatable            Potato.eatable.vegetable
3   Kiwi.eatable           Pear.fruit                Cabbage.vegetable
<And so on.. It is a large Dataframe>

我想在.的每个元素中移除 AFTER 最后一次出现点DF并将其保存为其他名称,例如{{1} }。
期望的输出:

df_temp

这是我试过的: EQ1 EQ2 EQ3 0 Apple Oranage.eatable NaN 1 Pear.eatable Banana NaN 2 Orange Tomato Potato.eatable 3 Kiwi Pear Cabbage <And so on>
不幸的是,这似乎只适用于字符串而不是Dataframe。我是否需要稍微调整一下这条线来实现我想要的?有人请帮忙!

2 个答案:

答案 0 :(得分:6)

你可以这样做:

df_temp = df.apply(lambda x: x.str.split('.').str[:-1].str.join('.'))

输出:

            EQ1              EQ2             EQ3
0         Apple  Oranage.eatable             NaN
1  Pear.eatable           Banana             NaN
2        Orange           Tomato  Potato.eatable
3          Kiwi             Pear         Cabbage   

请参阅http://getbootstrap.com/css/#grid-offsetting

答案 1 :(得分:1)

您可以使用提取。

df_temp = df.apply(lambda x: x.str.extract(r'.*\.([^\.]*)', expand=False))

df_new = df.apply(lambda x: x.str.extract(r'(.*)\.[^\.]*', expand=False))

df_temp看起来像:

       EQ1      EQ2        EQ3
0    fruit    fruit        NaN
1    fruit    fruit        NaN
2    fruit  eatable  vegetable
3  eatable    fruit  vegetable

df_new看起来像:

            EQ1              EQ2             EQ3
0         Apple  Oranage.eatable             NaN
1  Pear.eatable           Banana             NaN
2        Orange           Tomato  Potato.eatable
3          Kiwi             Pear         Cabbage