从列表和列表列表创建数据帧

2024-09-25 02:29:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个python列表

messages = ['message1', 'message2', 'message3']

labels = [[1,0,1,3,1], [1,1,2,0,3], [0,0,2,1,0]]

我正在创建数据框,它将消息作为第一列,将标签作为类别1、类别2、类别3、类别4、类别5,即总共6列

我试过了

msgs_labels = pd.DataFrame(
{'message': messages,
 'cat': labels,
})

但它返回两列消息


Tags: 数据消息messagedataframe列表labels标签类别
3条回答

使用:

df=(pd.DataFrame(labels,index=messages)
   .reset_index()
   .rename(columns=lambda x:'cat_'+str(x+1) if x!='index' else 'messages'))

df的输出:

    messages    cat_1   cat_2   cat_3   cat_4   cat_5
0   message1    1       0       1       3       1
1   message2    1       1       2       0       3
2   message3    0       0       2       1       0

这里有一个方法:

df = pd.DataFrame({i:j for i,j in zip(messages,labels)}).T.add_prefix('cat_').rename_axis('messages',axis=0).reset_index()

如果新列名以0开头没有问题,请使用带有joinDataFrame构造函数:

df = pd.DataFrame({'message': messages}).join(pd.DataFrame(labels).add_prefix('cat_'))
print (df)
    message  cat_0  cat_1  cat_2  cat_3  cat_4
0  message1      1      0      1      3      1
1  message2      1      1      2      0      3
2  message3      0      0      2      1      0

f = lambda x: f'cat_{x + 1}'
df = pd.DataFrame({'message': messages}).join(pd.DataFrame(labels).rename(columns=f))

print (df)

    message  cat_1  cat_2  cat_3  cat_4  cat_5
0  message1      1      0      1      3      1
1  message2      1      1      2      0      3
2  message3      0      0      2      1      0

还有一些想法:

f = lambda x: f'cat_{x + 1}'
df = (pd.DataFrame(labels,index=messages)
        .rename(columns=f)
        .rename_axis('messages')
        .reset_index())

print (df)
   messages  cat_1  cat_2  cat_3  cat_4  cat_5
0  message1      1      0      1      3      1
1  message2      1      1      2      0      3
2  message3      0      0      2      1      0

或者有点疯狂:

f = lambda x: f'cat_{x + 1}'
df = (pd.DataFrame(labels,index=pd.Series(messages, name='messages'))
        .rename(columns=f)
        .reset_index())

或先处理嵌套列表的解决方案:

d = {f'cat_{i + 1}': x for i, x in enumerate(map(list, zip(*labels)))}
d = {**{'message': messages}, **d}

df = pd.DataFrame(d)
print (df)
    message  cat_1  cat_2  cat_3  cat_4  cat_5
0  message1      1      0      1      3      1
1  message2      1      1      2      0      3
2  message3      0      0      2      1      0

相关问题 更多 >