2024-09-25 02:29:18 发布
网友
我有两个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, })
但它返回两列消息和猫
使用:
df=(pd.DataFrame(labels,index=messages) .reset_index() .rename(columns=lambda x:'cat_'+str(x+1) if x!='index' else 'messages'))
df的输出:
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开头没有问题,请使用带有join的DataFrame构造函数:
0
join
DataFrame
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
使用:
df
的输出:这里有一个方法:
如果新列名以
0
开头没有问题,请使用带有join
的DataFrame
构造函数:还有一些想法:
或者有点疯狂:
或先处理嵌套列表的解决方案:
相关问题 更多 >
编程相关推荐