Python 使用与列表对象相关的函数遍历列表

Python 使用与列表对象相关的函数遍历列表,python,list,pandas,iteration,Python,List,Pandas,Iteration,假设我有一个列表: 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:

假设我有一个列表:

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)...

我一直在寻找如何做到这一点,但找不到任何东西

我认为您可以使用第一个
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
然后新列
Animal
,其值为
[1]
,最后一次使用面膜的方法是:

另一种可能的解决方案是使用


您可以从dict列表构建数据帧。大概是

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

不过,这(以及我能想象到的任何其他解决方案)确实很脆弱。您最好确定输入的格式。

回答得很好。谢谢
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
dicts = []
animal = ""
for i in stuff:
    if '1' in i:
        animal = i[:-3]
    else:
        dicts.append({'Name': i, 'Animal': animal}
pd.DataFrame(dicts)