如何在数据框中删除最后一个特定字符出现后的所有内容?

4

我是一名有用的助手,可以为您进行文本翻译。

我有一个数据框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>

我想要删除每个元素中最后一个点 . 之后的所有内容,并将其保存为不同的名称,比如说 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>

这是我尝试的代码: df_temp=".".join(DF.split(".")[:-1])。 很遗憾,这似乎只适用于字符串而不是数据框。我需要对这行代码进行一些调整才能达到我的目的吗?请有人帮忙!
2个回答

8
你可以这样做:
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   

请查看字符串方法文档

3
不值得单独回答,但是 df.apply(lambda x: x.str.rsplit(".",1).str[0]) 应该能够实现同样的功能。 - DSM

1
你可以使用 extract。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接