【发布时间】:2023-04-03 01:40:01
【问题描述】:
我有以下熊猫数据框:
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3, 4, 47, 27], 'B': [5, 6, 7, 8, 21, 40],
'C': [9, 10, 11, 12, 45, 33], 'D': [3, 4, 1, 2, 27, 47], 'E': [7, 8, 5, 6, 40, 21],
'F': [[[11, 35], [36, 37]], [[12, 42], [14, 11]], [[9, 37], [10, 43], [12, 28]], [[105, 27]], [], [[45, 2]]]})
print(df1)
## A B C D E F
## 0 1 5 9 3 7 [[11, 35], [36, 37]]
## 1 2 6 10 4 8 [[12, 42], [14, 11]]
## 2 3 7 11 1 5 [[9, 37], [10, 43], [12, 28]]
## 3 4 8 12 2 6 [[105, 27]]
## 4 47 21 45 27 40 []
## 5 27 40 33 47 21 [[45, 2]]
##
F 列是一个列表列表。我想将其转换为元组列表。
通常,将列表列表转换为元组列表的方法是通过简单的列表推导,例如
foo = [[9, 37], [10, 43], [12, 28]]
foo = [tuple(lst) for lst in foo]
print(foo)
## [(9, 37), (10, 43), (12, 28)]
但是,我不知道如何在 pandas 中有效地逐行执行此操作。我的第一个想法是创建一个新列,如下所示:
df1['new_col'] = [tuple(lst) for lst in df1.F]
但是,这显然给出了错误的结果---F 现在是一个列表元组,而不是一个元组列表:
df1
A B C D E F new_col
0 1 5 9 3 7 [[11, 35], [36, 37]] ([11, 35], [36, 37])
1 2 6 10 4 8 [[12, 42], [14, 11]] ([12, 42], [14, 11])
2 3 7 11 1 5 [[9, 37], [10, 43], [12, 28]] ([9, 37], [10, 43], [12, 28])
3 4 8 12 2 6 [[105, 27]] ([105, 27],)
4 47 21 45 27 40 [] ()
5 27 40 33 47 21 [[45, 2]] ([45, 2],)
如果这很明显,我很抱歉——我的熊猫生锈了。
【问题讨论】:
-
发布了我的答案,但只是好奇 - 使用元组列表而不是列表列表有什么区别?
标签: python pandas numpy dataframe tuples