2013-04-11 32 views
11

我有一個熊貓數據框,看起來像這樣在大熊貓行,根據項目:如何複製列表中的

COL  data 
line1 [A,B,C] 

,其中在數據列中的項目既可以是一個列表或者只是逗號分隔的元素。有沒有得到的方式的容易

COL  data 
line1 A 
line1 B 
line1 C 

我可以遍歷列表,手動複製通過Python行,但有一些魔術大熊貓伎倆這樣做呢?關鍵是如何自動複製行。

謝謝!

回答

6

你可以寫一個簡單的清洗功能,使其成爲一個列表(假設它不是逗號的列表,你不能簡單地用ast.literal_eval):

def clean_string_to_list(s): 
    return [c for c in s if c not in '[,]'] # you might need to catch errors 

df['data'] = df['data'].apply(clean_string_to_list) 

迭代通過行似乎是一個合理的選擇:

In [11]: pd.DataFrame([(row['COL'], d) 
         for d in row['data'] 
         for _, row in df.iterrows()], 
         columns=df.columns) 
Out[11]: 
    COL data 
0 line1 A 
1 line1 B 
2 line1 C 

我怕我不認爲大熊貓的這種操作的專門迎合。

+0

「row」和「row ['COL']」來自哪裏? – 2015-03-15 09:54:07

+0

@AlexanderSupertramp列表內部理解'for _,row in df.iterrows()'。 _是行的索引,行是df的一行作爲一個Series。 – 2015-03-16 05:18:35

+4

這對我而言並不適用於書面;我需要切換兩個'for'語句:'[(row ['COL'],d)for _,在df.iterrows()中爲row ['data']]'中的d。 – RafG 2016-11-25 15:19:22