2017-09-08 5 views
1

これは最もスマートな質問ではないかもしれませんが、なぜ通常の分割機能がパンダの空のセルを返すのか分かりません。パンダの分割がうまくいきません

import pandas as pd 
import pickle 
df1 = pd.read_pickle('output.p') 
try: 
    df1['being_remixed'] = df1['file_names'].str.map(lambda x: x.split('by')[1]) # Also tried without str 
except: 
    df1['being_remixed'] = "" 

第二:: まず:file_names列に

def splitter(z): 
    try: 
     a = z.map(lambda x: x.split('by')[1]) 
    except: 
     a = "" 
    return a 
df1['being_remixed'] = df1['file_names'].apply(splitter) 

や文字列のようなものを見て:ここで私が試してみました物事のカップルです 「StrandbeestInspiredWalkingMachinebydanowall --- -1043007 .jpg "または " DetailedAlienHead --- -1913632.jpg " " --- _- "を使用して分割すると機能します。どうすれば問題を解決できますか?

答えて

3

あなたはとてもfillnaが必要であり、それはNaNを返す1つの項目リスト場合は、各リストの選択第二の値についてindexing with strを持つ文字列のリストのためのstr.splitが必要になります。

df1['being_remixed'] = df1['file_names'].str.split('by').str[1].fillna('') 

はサンプル:

df1 = pd.DataFrame({'file_names':['WalkingMachinebydanowall----1043007.jpg', 
            'DetailedAlienHead----1913632.jpg']}) 

print (df1) 
           file_names 
0 WalkingMachinebydanowall----1043007.jpg 
1   DetailedAlienHead----1913632.jpg 

df1['being_remixed'] = df1['file_names'].str.split('by').str[1].fillna('') 

print (df1) 
           file_names   being_remixed 
0 WalkingMachinebydanowall----1043007.jpg danowall----1043007.jpg 
1   DetailedAlienHead----1913632.jpg       

説明:

print (df1['file_names'].str.split('by')) 
0 [WalkingMachine, danowall----1043007.jpg] 
1   [DetailedAlienHead----1913632.jpg] 
Name: file_names, dtype: object 

print (df1['file_names'].str.split('by').str[1]) 
0 danowall----1043007.jpg 
1      NaN 
Name: file_names, dtype: object 
+1

My goodnes s、なぜ最後のstrがトリックですか? –

関連する問題