python-3.x 如何在将字典转换为 Dataframe 时设置索引?

7cwmlq89  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(157)

我有一本字典,看起来像下面

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', ...]})

我的目的是将这个字典转换为 Dataframe ,并将“Date”键值设置为 Dataframe 的索引。
我可以通过以下命令执行此工作

df = pd.DataFrame(dictionary, columns=['Date', 'Open', 'Close'])
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'列,其中一个是索引,另一个是原始列。
有没有什么方法可以在将字典转换为 Dataframe 时设置索引,而不会像下面这样有重叠的列?

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
pwuypxnk

pwuypxnk1#

使用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
lb3vh1jj

lb3vh1jj2#

如果不需要原始字典,则另一种方法是简单地弹出Date键。

df = pd.DataFrame(mydict, index=pd.Series(mydict.pop('Date'), name='Date'))

也就是说,我认为set_index是更方便、更简洁的选项,可以在新创建的框架上立即调用:

df = pd.DataFrame(mydict).set_index('Date')

相关问题