2017-10-06 64 views
1

我有一個Pandas系列,它爲每個值包含兩個單詞,並且希望將每個單詞作爲自己的單獨系列,最好使用白色空間修剪。使用Lambda X和Pandas在字符串中抓取第一個字

通常在Python如果我想這樣做我可以做類似如下:

my_string = "my string" 
first_word = my_string.split()[0].strip() 

然而,當我嘗試使用內大熊貓類似的會議上,我沒有得到我想要的結果。

下面的代碼是不是爲我工作:

data['New Series'] = data['Old Series'].apply(lambda x: x.split()[0].strip()) 

,我發現了以下錯誤:

IndexError: list index out of range 

這就像代碼以爲我處理的是一個空數組。我如何使用Python中的lambda x約定來執行此功能?我知道我可以做一個單獨的函數,然後做數據['Old Series']。apply(function_name),但我寧願保持代碼儘可能短。

+0

什麼空字符串?這些被分成一個空的列表。你確定數據框中沒有空字符串嗎? –

回答

2

我認爲歐需要text data functionsstr.split

data['New Series'] = data['Old Series'].str.split().str[0].str.strip() 

#seems strip is not necessary, str.split trim leader whitespaces 
#data['New Series'] = data['Old Series'].str.split().str[0] 

樣品:

data = pd.DataFrame([' my string', 'aa', '', ' my an aa'], columns=['Old Series']) 
data['New Series'] = data['Old Series'].str.split().str[0] 
print (data) 

    Old Series New Series 
0 my string   my 
1   aa   aa 
2     NaN 
3 my an aa   my 
+0

不知道爲什麼'.str'永遠贏得:) – Dark

1

可以使用lambda函數是這樣的:

data['New Series'] = data['Old Series'].apply(lambda x: x.split()[0].strip() if x else None) 
相關問題