我不小心用一个到错误副本的链接关闭了这个问题。下面是正确的:熊猫将列表的一列拆分成多列。
假设我有一个数据帧,其中一列是列表(长度已知且相同)或元组,例如:
df1 = pd.DataFrame(
{'vals': [['a', 'b', 'c', 'd'],['e','f','g','h']]}
)
ie:
vals
0 [a, b, c, d]
1 [e, f, g, h]
我想将“vals”中的值附加到单独的命名列中。我可以通过迭代行来笨拙地做到这一点:
for i in range(df1.shape[0]):
for j in range(0,4):
df1.loc[i, 'vals_'+j] = df1.loc[i, 'vals'] [j]
结果如愿以偿:
vals vals_0 vals_1 vals_2 vals_3
0 [a, b, c, d] a b c d
1 [e, f, g, h] e f g h
有没有更整洁(矢量化)的方式?我尝试使用[]但是我得到一个错误。
for j in range (0,4)
df1['vals_'+str(j)] = df1['vals'][j]
给出:
ValueError: Length of values does not match length of index
看起来Pandas试图将[]操作符应用于series/dataframe,而不是列内容。
可以将序列
初始值设定项应用于 vals
,然后add_prefix
以获取要查找的列名称。然后连接到
原始输出以获得所需的输出:
pd.concat([df1.vals, df1.vals.apply(pd.Series).add_prefix("vals_")], axis=1)
vals vals_0 vals_1 vals_2 vals_3
0 [a, b, c, d] a b c d
1 [e, f, g, h] e f g h
您可以使用分配
,应用
,pd.Series
:
df1.assign(**df1.vals.apply(pd.Series).add_prefix('val_'))
获取更多数据的更快方法是使用。values和tolist()与dataframe构造函数:
df1.assign(**pd.DataFrame(df1.vals.values.tolist()).add_prefix('val_'))
输出:
vals val_0 val_1 val_2 val_3
0 [a, b, c, d] a b c d
1 [e, f, g, h] e f g h
我有一个数据框,其中一列包含一个列表。 输出应如下所示: 我已经尝试了我在这里找到的这些选项,但不起作用。
如何将这列列表拆分为两列? 期望的结果:
问题内容: 假设我有一个元组列表,并且我想转换为多个列表。 例如,元组列表是 Python中是否有任何内置函数可以将其转换为: 这可以是一个简单的程序。但是我只是对Python中存在这种内置函数感到好奇。 问题答案: 内置功能几乎可以满足您的需求: 唯一的区别是您得到元组而不是列表。您可以使用将它们转换为列表
问题内容: 我有一列如下所示的熊猫: 我需要将列表的此列分为2列,并使用。 问题答案: 您可以使用与构造函数通过转换为创建通过使用: 对于新的DataFrame: 解决方案apply(pd.Series)非常慢:
问题内容: 说我有以下pandas数据框: 我如何“堆叠”“ b”列中的列表以将其转换为数据框: 问题答案: 更新: 通用矢量化方法-也适用于多列DF: 假设我们有以下DF: 解: 设定: 向量化NumPy方法: 旧答案: 尝试这个: 或@Boud提供的更好的解决方案:
问题内容: 我是Python的新手,需要将列表转换为字典。我知道我们可以将元组列表转换为字典。 这是输入列表: 并且我想将此列表转换为元组列表(或直接转换为字典),如下所示: 我们如何在Python中轻松做到这一点? 问题答案: 您想一次将三个项目分组吗? 您想一次分组N个项目吗?