【问题标题】:How can I set index while converting dictionary to dataframe?将字典转换为数据框时如何设置索引?
【发布时间】:2017-05-03 14:02:59
【问题描述】:

我有一本如下图所示的字典

defaultdict(list,
        {'Open': ['47.47', '47.46', '47.38', ...],
         'Close': ['47.48', '47.45', '47.40', ...],
         'Date': ['2016/11/22 07:00:00', '2016/11/22 06:59:00','2016/11/22 06:58:00', ...]})

我的目的是将此字典转换为数据框并将“日期”键值设置为数据框的索引。

我可以通过以下命令完成这项工作

df = pd.DataFrame(dictionary, columns=['Date', 'Open', 'Close'])

     0  Date                  Open    Close
     1  2016/11/22 07:00:00   47.47   47.48
     2  2016/11/22 06:59:00   47.46   47.45
     3  2016/11/22 06:58:00   47.38   47.38

df.index = df.Date

     Date                  Date                  Open    Close
     2016/11/22 07:00:00   2016/11/22 07:00:00   47.47   47.48
     2016/11/22 06:59:00   2016/11/22 06:59:00   47.46   47.45
     2016/11/22 06:58:00   2016/11/22 06:58:00   47.38   47.38

但是,我有两个“日期”列,其中一个是索引,另一个是原始列。

有什么方法可以设置索引同时将字典转换为数据框,而不会像下面这样重叠列?

     Date                  Close       Open
     2016/11/22 07:00:00   47.48       47.47
     2016/11/22 06:59:00   47.45       47.46
     2016/11/22 06:58:00   47.38       47.38

感谢您阅读本文! :)

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    使用set_index:

    df = pd.DataFrame(dictionary, columns=['Date', 'Open', 'Close'])  
    df = df.set_index('Date')       
    print (df)
                          Open  Close
    Date                             
    2016/11/22 07:00:00  47.47  47.48
    2016/11/22 06:59:00  47.46  47.45
    2016/11/22 06:58:00  47.38  47.40
    

    或使用inplace:

    df = pd.DataFrame(dictionary, columns=['Date', 'Open', 'Close'])  
    df.set_index('Date', inplace=True)       
    print (df)
                          Open  Close
    Date                             
    2016/11/22 07:00:00  47.47  47.48
    2016/11/22 06:59:00  47.46  47.45
    2016/11/22 06:58:00  47.38  47.40
    

    另一种可能的解决方案是通过Date 键过滤掉dict,然后通过dictionary['Date'] 设置索引:

    df = pd.DataFrame({k: v for k, v in dictionary.items() if not k == 'Date'}, 
                       index=dictionary['Date'], 
                       columns=['Open','Close'])  
    df.index.name = 'Date'
    print (df)
                          Open  Close
    Date                             
    2016/11/22 07:00:00  47.47  47.48
    2016/11/22 06:59:00  47.46  47.45
    2016/11/22 06:58:00  47.38  47.40
    

    【讨论】:

    • 很高兴能帮到您!如果我的回答有帮助,请不要忘记accept。谢谢。
    • 感谢您的详细解答!我可以问你对最后一个解决方案的更多解释吗?我很难理解 DataFrame() 命令中的内容。 k 和 v 代表什么?它类似于列表推导吗?
    • 是的,它是dict理解,与列表理解非常相似,只是输出是另一个或改变的原始dict。
    猜你喜欢
    • 2022-01-25
    • 2018-06-03
    • 2020-07-31
    • 2019-05-26
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多