2017-02-12 7 views
1

Допустим, у меня есть список:итерацию по списку с функцией, которая относится список объектов

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

Можно ли перебирать список и присвоить имя животного к животному в формате dataframe, как:

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 конструктор:

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 новый столбец Animal с str.extract значений с [1] и последнего использования boolean indexing с маской на Series.duplicated:

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

Вы можете построить dataframe из списков dicts. Так что-то вроде

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

Это (и любое другое решение, которое я могу себе представить) действительно хрупкое. Вам лучше быть в курсе формата вашего ввода.

 Смежные вопросы

  • Нет связанных вопросов^_^