【问题标题】:find the biggest string in each row in a Pandas DataFrame在 Pandas DataFrame 的每一行中找到最大的字符串
【发布时间】:2016-06-29 16:52:18
【问题描述】:

我是 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
...

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

...
12                RAJALAKSHMI
13                          J
14                      TSIPE
15                    NURRIZA
16                     HATICE
17                     ROMERO
18                  LLIBERTAT
19                          E
20                    JASMEET
...

我试图用空格和apply(max)分割字符串,但它不起作用。似乎 pandas 没有对每一行应用 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
...

【问题讨论】:

    标签: python string pandas split max


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      你没有替换它的值...

      试试这个功能:

      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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-18
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-31
        • 2022-01-14
        相关资源
        最近更新 更多