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