Python 查找数据帧中每行中最大的字符串

Python 查找数据帧中每行中最大的字符串,python,string,pandas,split,max,Python,String,Pandas,Split,Max,我是熊猫队的新手,我正在尝试为数据帧中的每一行获取最大的字符串 import pandas as pd import sqlite3 authors = pd.read_sql('select * from authors') authors['name'] ... 12 KRISHNAN RAJALAKSHMI 13 J O 14 TSIPE 15 NUR

我是熊猫队的新手,我正在尝试为数据帧中的每一行获取最大的字符串

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']行中最大的字符串:

...
12                RAJALAKSHMI
13                          J
14                      TSIPE
15                    NURRIZA
16                     HATICE
17                     ROMERO
18                  LLIBERTAT
19                          E
20                    JASMEET
...
我尝试将字符串按空格分割并应用(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
...

您没有替换它的值

尝试此功能:

def getName(df):
    df[0] = df[0].apply(lambda x: max(x.split(), key=len))
然后你只需要打电话:

getName(authors)
请注意,我在此代码中重新分配了
df[0]
的每个值

输出:

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

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

没有替换其值

尝试此功能:

def getName(df):
    df[0] = df[0].apply(lambda x: max(x.split(), key=len))
然后你只需要打电话:

getName(authors)
请注意,我在此代码中重新分配了
df[0]
的每个值

输出:

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

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

当您告诉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对拆分序列应用
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()
是专门为获取数值列的最大值而构建的数据帧方法,不是每个拆分行的最大长度字符串