在 Pandas DataFrame 的每一行中找到最大的字符串

Gui*_*rme 0 python string split max pandas

我是 Pandas 的新手,我试图为 DataFrame 中的每一行获取最大的字符串。

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
...
Run Code Online (Sandbox Code Playgroud)

我期望的是在每个 author['name'] 行中取回最大的字符串:

...
12                RAJALAKSHMI
13                          J
14                      TSIPE
15                    NURRIZA
16                     HATICE
17                     ROMERO
18                  LLIBERTAT
19                          E
20                    JASMEET
...
Run Code Online (Sandbox Code Playgroud)

我试图用空格分割字符串并应用(最大),但它不起作用。似乎熊猫没有对每一行应用 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
...
Run Code Online (Sandbox Code Playgroud)

Blu*_*ion 5

当您告诉 pandas 应用于max拆分系列时,它不知道应该最大化什么。你可以试试像

authors['name'].apply(lambda x: max(x.split(), key=len))
Run Code Online (Sandbox Code Playgroud)

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

另请注意,虽然authors['name'].apply(lambda x: max(x.split()))无需指定key=lenfor max 即可authors['name'].str.split().max()工作,但不起作用,因为max()它是专为获取数字列的最大值而不是每个拆分行的最大长度字符串而构建的 Pandas 数据框方法。