2013-04-11 36 views
11

bir listede öğelere dayalı pandalar satırları, yinelenen nasılŞöyle bir pandalar dataframe var

COL  data 
line1 [A,B,C] 

veri sütununda ürün listesini olabilir ya da sadece virgülle unsurları ayrıldı nerede . var mı almanın yolu bir kolay:

COL  data 
line1 A 
line1 B 
line1 C 

Ben liste yineleme ve elle piton yoluyla satırlarını kopyalamak, ancak bunu yapmanın bazı sihirli pandalar hile var ki? Anahtar nokta, satırların otomatik olarak nasıl kopyalanacağıdır.

Teşekkürler!

cevap

6

Ona bir listesini yapmak için basit bir temizlik işlevi yazabiliriz (o virgül bir liste değil varsayarak ve sadece ast.literal_eval kullanamazsınız): satırlar arasında

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) 

Yineleme Yapmak makul gibi görünüyor seçim:

Ben panda sanmıyorum korkuyorum
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 

manipülasyon bu tür için özel olarak hitap etmektedir.

+0

"Satır" ve "satır ['COL']" nereden geliyor? –

+0

@AlexanderSupertramp, listenin içinde _ için, df.iterrows() 'satırındadır. _ Satırın dizinidir, satır bir dizi olarak df satırdır. –

+4

Bu benim için yazılı olarak işe yaramadı; 'For'statements iki geçiş yapmak gerekiyordu: [(satır [' COL '], d) _ için satır, df.iterrows() satırında [' data ']] 'd. – RafG