2017-10-06 53 views
1

我有一個熊貓數據框的列表列,並希望從列表字符串中提取數字並將它們添加到它們自己的單獨列中。從列表中的括號中提取數字

 Column A 
0  [ FUNNY (1), CARING (1)] 
1  [ Gives good feedback (17), Clear communicator (2)] 
2  [ CARING (3), Gives good feedback (3)] 
3  [ FUNNY (2), Clear communicator (1)] 
4           [] 
5           [] 
6  [ CARING (1), Clear communicator (1)] 

我想輸出到如下所示:

FUNNY  CARING Gives good feedback Clear communicator 
    1   1   None     None 
    None  None   17      2 
    None  3   3      None 
    2   None   None     1 
    None  None   None     None 

等等

+0

我最好字符串分割成兩列由',',然後使用正則表達式來匹配'\ D'或'\ d +'(以適合您的所有情況爲準。 – Mako212

+0

謝謝!我試過這個,但問題是這些列表並不是統一排列的(例如,在這種情況下,「滑稽」將在第1和第2列中),實際上最多有17個項目。 –

回答

1

讓我們用applypd.Series,然後extract與​​和unstack重塑:

df['Column A'].apply(pd.Series).stack().str.extract(r'(\w+)\((\d+)', expand=True)\ 
       .reset_index(1, drop=True).set_index(0, append=True)[1]\ 
       .unstack(1) 

輸出:

0 Authentic Caring Classy Funny 
0   1  3 None  2 
1   2 None  1  2 

編輯與新的輸入數據集:

df['Column A'].apply(pd.Series).stack().str.extract(r'(\w+).*\((\d+)', expand=True)\ 
       .reset_index(1, drop=True)\ 
       .set_index(0, append=True)[1]\ 
       .unstack(1) 

0 CARING Clear FUNNY Gives 
0  1 None  1 None 
1 None  2 None 17 
2  3 None None  3 
3 None  1  2 None 
6  1  1 None None 
+0

對於我給出的示例而言,這很好用,但給我的數據有以下錯誤。 「索引包含重複條目,無法重新塑造」。我修改了這個問題。 –

+0

@KellyG它爲我工作了相同的數據集..我不得不修改提取語句一點點。 –