Pandas中索引列能否用于.loc访问器?设置index_col后为何报错?
问题
我是Pandas初学者,想了解索引列是否可用于Pandas的.loc访问器。
以下是可正常运行的代码:
daus = pd.read_csv("active-users-by-day.csv", parse_dates=['date']) daus.loc[:, 'date']
以下是触发错误的代码:
daus = pd.read_csv("active-users-by-day.csv", parse_dates=['date'], index_col='date') daus.loc[:, 'date']
经排查发现,当在read_csv函数中设置index_col="date"后,就无法通过.loc访问器访问date列,请问这是为什么?
解答
当你用index_col='date'参数时,Pandas会把date列从DataFrame的普通列集合里移除,转而将它设置为DataFrame的索引(Index)——索引是存储在daus.index里的独立对象,不再属于daus.columns的范畴。
而.loc[:, 'date']的第二个参数是用来指定列名的,此时date已经不是列了,自然会触发找不到列的错误。
如果需要访问这部分数据,有两种常见方式:
- 把索引还原成普通列:执行
daus.reset_index(inplace=True)后,date会重新回到列集合里,这时就能用daus.loc[:, 'date']正常访问了。 - 直接访问索引:如果不需要把它变回列,直接用
daus.index就能拿到所有日期值;如果是要基于索引筛选行,可以用.loc的行索引部分,比如daus.loc['2023-01-01':'2023-01-07', :]来筛选某段日期的所有行数据。
内容的提问来源于stack exchange,提问作者David Park
相关产品推荐
相关产品推荐

