首页 > 解决方案 > 将包含一些嵌套列表元素和元组的列表转换为数据框

问题描述

我要转换为数据框的列表在每个单元格中存储不同的数据类型:

[In]  type(example_list)
[Out] list

[In]  type(example_list[0])
[Out] list

[In]  type(example_list[0][0])
[Out] str

[In]  type(example_list[0][1])
[Out] tuple

[In]  type(example_list[0][2])
[Out] tuple

[In]  type(example_list[0][1][0])
[Out] list

并且元组元素都具有以下格式:

[In]  example_list[0][1]
[Out] ([array([200.85183333, 200.85183333, 200.85183333])], ['#c8c8c8'])

[In] type(example_list[0][1][0])
[Out] list

[In] type(example_list[0][1][1])
[Out] list

当我使用该pd.DataFrame函数时,我最终得到 3 列,但我想要 5 列(即每个元组元素有 2 列)。

当我运行以下命令时:

df = pd.DataFrame(example_list, columns=['Name','PrimaryColors','SecondaryColors'])
df.to_csv('test.csv', sep=',')

这就是我得到的(仅输出下面的第一行):

E123    ([array([200.85183333, 200.85183333, 200.85183333])], ['#c8c8c8'])  ([array([226.9, 226.9, 226.9])], ['#e2e2e2'])

我怎样才能以 5 列而不是 3 列结束,并使数据框遵循以下格式?

Name    PrimaryColorRGB                             PrHEX       SecondaryColorsRGB       SecHEX
E123    200.85183333, 200.85183333, 200.85183333    #c8c8c8     226.9, 226.9, 226.9      #e2e2e2

标签: pythonpandaslist

解决方案


Iiuc,您可以根据 jezrael 在此处对类似问题的回答从您的 3 列数据框中创建所需的结果:https ://stackoverflow.com/a/35491399/8300135

在你的情况下:

df[['PrimaryColorsRGB','PrimaryColorsHex']] = pd.DataFrame(df.PrimaryColors.values.tolist(), index= df.index)

与您的辅助颜色列相同。

但是,在您的情况下,您仍然会得到列条目,它们是只有一个元素的列表,一列中有一个元组,另一列中有一个字符串。

你可以像这样解决这个问题

df.PrimaryColorsRGB = df.PrimaryColorsRGB.str[0]
df.PrimaryColorsHex = df.PrimaryColorsHex.str[0]

同样,二次色列也是如此。


推荐阅读