pandas dataframe 时间作为索引时 如何转化为日期而非时间?

2022-03-04 01:46:14 +08:00
 yagamil

代码是这样的

数据长这样的:

图裂了 http://xximg.30daydo.com/picgo/20220304_001.png

然后

df = _df.set_index(['净值日期','code']).unstack()['日增长率']
df.index = pd.to_datetime(df.index,format='%Y-%m-%d')
print(df.head())

后面数据变成这样的:

http://xximg.30daydo.com/picgo/20220304_002.png

如果要获取某一天的数据,通过索引 df['2021-01-01'] 是会报错,说 key 不存在,而用 df['2021-01-01 00:00:00'] 也不行

但按月份索引是可以的 df['2021-01'] 获取 1 月份的数据

2186 次点击
所在节点    Python
7 条回复
dongxiao
2022-03-04 09:37:53 +08:00
执行的时候应该有条 warning 信息吧:
```FutureWarning: Indexing a DataFrame with a datetimelike index using a single string to slice the rows, like `frame[string]`, is deprecated and will be removed in a future version. Use `frame.loc[string]` instead.
```

所以你应该这么执行:
```
df.loc["2020-01-01"]
```
milkpuff
2022-03-04 11:25:35 +08:00
可能你真的没有'2021-01-01'这一天的数据。换一天试试?
yagamil
2022-03-04 11:57:03 +08:00
@dongxiao 这个试过,是可以的,就是不知道为和不能直接用 df['2022-01-01'] 这种
yagamil
2022-03-04 11:57:28 +08:00
@milkpuff 有的,我用 pycharm 对这右边的数据看的
milkpuff
2022-03-04 14:17:28 +08:00
奥,我猜,df['2021-01-01']默认从列里面找的,df['2021-01']转换成了 slice 从行里面找的。
代码在 pandas/core/frame.py -> DataFrame.__getitem__ 中,可以去研究一下。
Rush9999
2022-03-04 16:41:43 +08:00
df.index = pd.to_datetime(df.index,).strftime('%Y-%m-%d')
yagamil
2022-03-04 17:15:48 +08:00
@Rush9999 这应该可以,不过把时间索引变成了字符串。 比较的没有问题,不过无法进行聚合采样,比如按照年,月的操作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/837827

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX