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

con*_*eak 4 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>
Run Code Online (Sandbox Code Playgroud)

我希望在每个元素中最后一次出现点之后删除所有.内容,DF并将其保存在不同的名称之下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>
Run Code Online (Sandbox Code Playgroud)

这就是我的尝试: df_temp=".".join(DF.split(".")[:-1]).
不幸的是,这似乎只适用于字符串而不是Dataframe.我是否需要稍微调整一下这条线以实现我想要的效果?有人请帮忙!

小智 7

你可以这样做:

df_temp = df.apply(lambda x: x.str.split('.').str[:-1].str.join('.'))
Run Code Online (Sandbox Code Playgroud)

输出:

            EQ1              EQ2             EQ3
0         Apple  Oranage.eatable             NaN
1  Pear.eatable           Banana             NaN
2        Orange           Tomato  Potato.eatable
3          Kiwi             Pear         Cabbage   
Run Code Online (Sandbox Code Playgroud)

请参阅字符串方法docs

  • 不值得单独回答,但是`df.apply(lambda x:x.str.rsplit(".",1).str [0])`应该做同样的事情. (3认同)