在pandas中将时间戳列转换为句点

2024-07-01 06:53:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一列时间戳需要转换为句点(“月”)。e、 g

1985-12-31 00:00:00 to 1985-12

Pandas有一个.to_period函数,但它只适用于时间戳索引,不适用于列。所以只能有一个句点索引,而不能有一个句点列?

只有当时间戳是唯一的索引时,它才起作用。也就是说,如果时间戳是multIndex的一部分,.to_period()函数就不能正常工作。

熊猫似乎认为人们总是使用时间戳和句点作为索引,但不是一列,显然不是这样。

不管怎样,我可以绕过这个吗?或者如果不是在熊猫身上,能在纽比完成吗?

谢谢!


Tags: to函数pandas时间period句点multindex
2条回答

我今天遇到了这个线程,在进一步挖掘之后发现Pandas.15提供了一个更简单的选项use.dt,您可以避免创建索引的步骤,直接创建列。您可以使用以下方法获得相同的结果:

df[1] = df[0].dt.to_period('M')

你说得对,你需要做的是一个DatetimeIndex对象,而不仅仅是一列datetimes。不过,这非常简单—只需将其包装在DatetimeIndex构造函数中:

In [11]: df = pd.DataFrame(pd.date_range('2014-01-01', freq='2w', periods=12))

In [12]: df
Out[12]:
            0
0  2014-01-05
1  2014-01-19
2  2014-02-02
3  2014-02-16
4  2014-03-02
5  2014-03-16
6  2014-03-30
7  2014-04-13
8  2014-04-27
9  2014-05-11
10 2014-05-25
11 2014-06-08

In [13]: pd.DatetimeIndex(df[0]).to_period('M')
Out[13]:
<class 'pandas.tseries.period.PeriodIndex'>
freq: M
[2014-01, ..., 2014-06]
length: 12

这是一个周期索引,但您可以将其设为列:

In [14]: df[1] = pd.DatetimeIndex(df[0]).to_period('M')

In [15]: df
Out[15]:
            0        1
0  2014-01-05  2014-01
1  2014-01-19  2014-01
2  2014-02-02  2014-02
3  2014-02-16  2014-02
4  2014-03-02  2014-03
5  2014-03-16  2014-03
6  2014-03-30  2014-03
7  2014-04-13  2014-04
8  2014-04-27  2014-04
9  2014-05-11  2014-05
10 2014-05-25  2014-05
11 2014-06-08  2014-06

如果时间戳是多索引的一部分,则可以执行类似的技巧,方法是提取“column”并按上述方式将其传递到DatetimeIndex,例如使用^{}
例如:

df[2] = 2
df.set_index([0, 1], inplace=True)
df.index.get_level_values(0)  # returns a DatetimeIndex

相关问题 更多 >

    热门问题