使用与列表对象相关的函数迭代列表

时间:2017-02-12 19:41:41

标签: 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:
        new_list.append(i)...

我一直在详尽地搜索如何做到这一点但找不到任何东西。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以从dicts列表构建数据框。像

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

这(以及我能想象的任何其他解决方案)实在是非常脆弱。您最好确定输入的格式。