如何拆分元组并将其保存到数据框

时间:2019-05-25 16:06:38

标签: python python-3.x pandas dataframe tuples

我有一个这样的元组列表:

a=[('A7855', 'item1', 'item2'),('A7856', 'item3', 'item4', 'item5')]

,我想将该列表保存到数据框中,如下所示:

No    ID     itemNum
1     A7855  item1
2            item2
3     A7856  item3
4            item4
5            item5

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您还可以在此处使用melt

    <option value="femme">Femme</option>
    <option value="homme">Homme</option>

df=(pd.DataFrame(a).melt(0,value_name='itemNum').
drop('variable',1).dropna().sort_values(0).rename(columns={0:'ID'}).reset_index(drop=True))
print(df)

要满足您的确切要求,请对 ID itemNum 0 A7855 item1 1 A7855 item2 2 A7856 item3 3 A7856 item4 4 A7856 item5 进行操作:

df

df.loc[df.duplicated('ID'),'ID']=''
df.insert(0,'No',range(1,len(df)+1))
print(df)

答案 1 :(得分:1)

将列表推导与扁平化结合使用,并循环所有值,而无需首先获取元组列表,然后将其传递给DataFrame构造函数:

b = [(x[0], y) for x in a for y in x[1:]]
df = pd.DataFrame(b, columns=['ID','itemNum'])
print (df)
      ID itemNum
0  A7855   item1
1  A7855   item2
2  A7856   item3
3  A7856   item4
4  A7856   item5

如果只需要ID列的第一个值,则添加if-else语句,并枚举列表的计数器:

b = [(x[0], y) if i == 0 
               else ('', y) 
               for x in a for i, y in enumerate(x[1:])]
df = pd.DataFrame(b, columns=['ID','itemNum'])
print (df)
      ID itemNum
0  A7855   item1
1          item2
2  A7856   item3
3          item4
4          item5

如果需要新列No,请添加DataFrame.insert,以添加索引值为+ 1的新列:

df.insert(0, 'No', df.index + 1)
print (df)
   No     ID itemNum
0   1  A7855   item1
1   2          item2
2   3  A7856   item3
3   4          item4
4   5          item5

答案 2 :(得分:1)

我建议您使用多个变量分配。在第一个元组之后的所有元组变量都放入“ itemnum”。

data=[('A7855', 'item1', 'item2'),('A7856', 'item3', 'item4', 'item5')]
rows = []
ids = set()
for idx, *itemnum in data:
    for i in itemnum:
        if idx in ids:
            idx = ''
        rows.append((idx, i))
        ids.add(idx)
df = pd.DataFrame(rows, columns=['ID','itemNum'])
df.index = [i+1 for i in df.index]

我的输出:

      ID itemNum
1  A7855   item1
2          item2
3  A7856   item3
4          item4
5          item5