2016-06-29 6 views
0

私は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 
... 

は、各作家の最大の文字列を取り戻すためにある[「名前」]行:

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

は、私は、スペースで文字列を分割し、(最大)を適用しようとしたが、そうではありませんワーキング。パンダは各列に最大値を適用していないようです。あなたは、その値を交換しない

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

答えて

4

分割シリーズにmaxを適用するようにパンダに指示すると、最大化すべき内容がわかりません。その代わりに、キーとして文字列の長さを使用して、これはサブストリングの配列を作成し、それぞれの行について

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

ような何かをしようとし、最大の文字列を返すことがあります。 max()が、具体的数値カラムの最大値を取得するために構築されているパンダのデータフレーム方式ではなく、最大の長さの文字列であるため、

はまた、最大のためkey=lenを指定せずにauthors['name'].apply(lambda x: max(x.split()))作品ながら、authors['name'].str.split().max()が動作しないことに注意してください分割された各行の

+0

多くのありがとうございます。それは魅力のように働く。 – Guilherme

1

...

この機能を試してみてください:

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 

あなたのコード内の主な問題は、各行の値を再割り当てされなかったことです。

関連する問題