【问题标题】:From tuple's list to dataframes从元组列表到数据框
【发布时间】:2022-01-04 23:17:11
【问题描述】:

所以我有一个关于创建这些类型列表的数据框的问题。 我正在使用类似于上述示例的数据集(尽管要大得多)。

data = [("A", (1, 2, 3)), ("B", (5, 7, 9)), ("C", (2, 4, 6))]

我试图让它看起来像这样的数据框:

A  B  C
1  5  2
2  7  4
3  9  6

我已经探索过

pd.DataFrame()

但它似乎不起作用。有什么建议吗?

【问题讨论】:

  • 先将列表转换为字典:pd.DataFrame(dict(data))

标签: python pandas list dataframe


【解决方案1】:

这可能不是最有效的方法,但您可以将数据转换为 dict,然后再转换为 DataFrame

import pandas as pd

data = [("A", (1, 2, 3)), ("B", (5, 7, 9)), ("C", (2, 4, 6))]

# convert to dictionary then to dataframe
df = pd.DataFrame(dict(data))

【讨论】:

  • 我在想字典,太好了,谢谢。
【解决方案2】:

您可以将数据转换为pd.DataFrame,然后使用set_index 方法将索引设置为每个元组中的字母,然后转置数据框并使用explode 方法将内部元组分解为单独的行。然后使用reset_indexrename_axis 方法得到想要的结果。

data = [("A", (1, 2, 3)), ("B", (5, 7, 9)), ("C", (2, 4, 6))]
df = pd.DataFrame(data).set_index(0).T.explode(['A','B','C']).reset_index(drop=True).rename_axis(columns={0:None})

另一种选择是使用apply(pd.Series) 并转置:

df = pd.DataFrame(data).set_index(0)[1].apply(pd.Series).T

另一种方式。您可以使用zip 将名称与数据分开并转换为pd.DataFrame

idx, data = zip(*data)
df = pd.DataFrame(data, index=idx).T

输出:

   A  B  C
0  1  5  2
1  2  7  4
2  3  9  6

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 2019-06-29
    • 2019-06-12
    • 1970-01-01
    • 2017-07-21
    • 2020-07-31
    • 1970-01-01
    • 2020-10-20
    • 2023-01-13
    相关资源
    最近更新 更多