2017-02-12 46 views
1

比方說,我有一個列表的功能迭代:通過列表與涉及對象列表

stuff = ['Dogs[1]','Jerry','Harry','Paul','Cats[1]', 'Toby','Meow','Felix'] 

是否有可能通過列表迭代和動物的名稱分配給一個數據幀格式喜歡的動物:

Animal Name 
Dog  Jerry 
Dog  Harry 
Dog  Paul 
Cat  Toby... etc 

通過列表迭代

for i in stuff: 
    if '1' in i: 
     new_list.append(i)... 

我一直在尋找詳盡如何牛逼o做到這一點,但找不到任何東西。

回答

2

我覺得你可以先用DataFrame構造:由Series.duplicated

df = pd.DataFrame({'Name':stuff}) 
print (df) 
     Name 
0 Dogs[1] 
1 Jerry 
2 Harry 
3  Paul 
4 Cats[1] 
5  Toby 
6  Meow 
7 Felix 

然後DataFrame.insert新列Animalstr.extract值與[1]和最後使用boolean indexing用面膜:

df.insert(0, 'Animal', df['Name'].str.extract('(.*)\[1\]', expand=False).ffill()) 
df = df[df['Animal'].duplicated()].reset_index(drop=True) 
print (df) 
    Animal Name 
0 Dogs Jerry 
1 Dogs Harry 
2 Dogs Paul 
3 Cats Toby 
4 Cats Meow 
5 Cats Felix 

另一種可能的解決方案與面具創建str.contains

df.insert(0, 'Animal', df['Name'].str.extract('(.*)\[1]', expand=False).ffill()) 
df = df[~df['Name'].str.contains('\[1]')].reset_index(drop=True) 
print (df) 
    Animal Name 
0 Dogs Jerry 
1 Dogs Harry 
2 Dogs Paul 
3 Cats Toby 
4 Cats Meow 
5 Cats Felix 
+0

很好的答案。謝謝。 – Joey

+0

謝謝你的接受。 – jezrael

0

您可以從字典列表構建數據框。所以像

dicts = [] 
animal = "" 
for i in stuff: 
    if '1' in i: 
     animal = i[:-3] 
    else: 
     dicts.append({'Name': i, 'Animal': animal} 
pd.DataFrame(dicts) 

雖然這(和我能想到的任何其他解決方案)是非常脆弱的。你最好確定你輸入的格式。