假设我有一个清单:
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)...
我一直在详尽地搜索如何做到这一点但找不到任何东西。
答案 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
创建掩码的另一种可能解决方案
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)
这(以及我能想象的任何其他解决方案)实在是非常脆弱。您最好确定输入的格式。