查找Pandas DataFram中每行中最大的字符串

2024-05-14 09:12:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Pandas还不熟悉,我正在尝试获取数据帧中每一行的最大字符串。在

import pandas as pd
import sqlite3
authors = pd.read_sql('select * from authors')

authors['name']
...
12       KRISHNAN RAJALAKSHMI
13                        J O
14                      TSIPE
15                    NURRIZA
16                HATICE OZEL
17                   D ROMERO
18                  LLIBERTAT
19                        E F
20               JASMEET KAUR
...

我希望得到的是每个authors['name']行中最大的字符串:

^{pr2}$

我试着用空格分隔字符串并应用(max),但它不起作用。熊猫似乎并没有将max应用于每一行。在

authors['name'].str.split().apply(max)

# or
authors['name'].str.split().apply(lambda x: max(x))

# or

def get_max(x):
    y = max(x)
    print (y) # y is the biggest string in each row
    return y
authors['name'].str.split().apply(get_max)

# Still results in:

...
12       KRISHNAN RAJALAKSHMI
13                        J O
14                      TSIPE
15                    NURRIZA
16                HATICE OZEL
17                   D ROMERO
18                  LLIBERTAT
19                        E F
20               JASMEET KAUR
...

Tags: 字符串nameimportauthorsmaxpdsplitapply
2条回答

当您告诉pandas将max应用于分割序列时,它不知道它应该最大化什么。你可以试试类似的方法

authors['name'].apply(lambda x: max(x.split(), key=len))

对于每一行,这将创建一个子字符串数组,并使用字符串长度作为键返回最大的字符串。在

还要注意,虽然authors['name'].apply(lambda x: max(x.split()))不需要为max指定key=len,但authors['name'].str.split().max()不起作用,因为max()是专门为获得数值列的最大值而不是每个拆分行的最大长度字符串而构建的pandas数据帧方法。在

你不能替换它的值。。。在

尝试此功能:

def getName(df):
    df[0] = df[0].apply(lambda x: max(x.split(), key=len))

然后你只需要打电话:

^{pr2}$

注意,我在这段代码中重新分配了df[0]的每个值。在

输出:

    names
0   RAJALAKSHMI
1   O
2   TSIPE
3   NURRIZA
4   HATICE
5   ROMERO
6   LLIBERTAT
7   F
8   JASMEET

代码中的主要问题是没有重新分配每行中的值。在

相关问题 更多 >

    热门问题