【问题标题】:Creating a dataframe from a dict where keys are tuples and values are lists从 dict 创建数据框,其中键是元组,值是列表
【发布时间】:2021-09-26 22:50:47
【问题描述】:

假设我们有以下字典,键为元组,值为列表:

dict_temp  = {('first', 'line'): [1, 2], ('second', 'line'): [1, 21, 11]}

我想创建一个包含 2+n 列的数据框:来自元组的 Col1 和 Col2,以及来自列表中每个元素的 Col3、Col4...,它们应该如下所示:

    0       1       2   3   4
0   first   line    1   2   NaN
1   second  line    1   21  11.0

因此,我还需要用列表拆分列。我所做的是:

dict_temp  = {('first', 'line'): [1, 2], ('second', 'line'): [1, 21, 11]}
df_left    = pd.Series(dict_temp).reset_index()
df_right   = pd.DataFrame(df_left[0].tolist())
df_left    = df_left.drop([0], axis=1) # Drop column
df         = pd.concat([df_left, df_right], axis=1)
#df.columns = [0, 1, 2, 3, 4]
df

输出是:

level_0 level_1     0   1   2
0   first   line    1   2   NaN
1   second  line    1   21  11.0

虽然我已经处理了受this questionthat question 启发的问题,但我认为应该有更好的pythonic 方式来处理它。

【问题讨论】:

    标签: python python-3.x pandas list split


    【解决方案1】:

    尝试将此list 理解与列表解包一起使用,然后只需将其转换为DataFrame

    lst = [[*k] + v for k, v in dict_temp.items()]
    print(pd.DataFrame(lst))
    

    输出:

            0     1  2   3     4
    0   first  line  1   2   NaN
    1  second  line  1  21  11.0
    

    【讨论】:

    • 或者list(k) + vitertools.chain(k, v)
    • 是的@timgeb,它们也是其他不错的选择:)
    • 很棒的答案,非常感谢。也标记为答案。
    猜你喜欢
    • 2017-10-10
    • 2019-05-25
    • 2016-10-11
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    相关资源
    最近更新 更多