在熊猫中分割时间戳记日期

时间:2019-05-03 17:55:54

标签: python pandas split timestamp

我对熊猫问题有疑问:

所以我有一个如下数据框:

timestamp     user     exercises
2018-01-01    John         7
2018-01-01    Mary         9
2018-02-01    John         3
2018-02-01    Mary         2
2018-03-01    John         1
2018-03-01    Mary         5
2019-01-01    John         3
2019-01-01    Mary         4
2019-02-01    John         2
2019-02-01    Mary         5
2020-01-01    John         6
2020-01-01    Mary         2
2020-02-01    John         1
2020-02-01    Mary         2

我需要获得一个输出数据框,该数据框是给定数据框的子集,但它必须仅保留2018年的数据,像这样:

    timestamp     user     exercises
    2018-01-01    John         7
    2018-01-01    Mary         9
    2018-02-01    John         3
    2018-02-01    Mary         2
    2018-03-01    John         1
    2018-03-01    Mary         5

关于如何从给定数据框中获取此输出数据框的任何想法?

非常感谢您。

任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:1)

尝试:

import pandas as pd
import datetime as dt

df = pd.DataFrame({"timestamp": ['2018-01-01',
                                 '2018-01-01',
                                 '2019-01-01',
                                 '2020-01-01'],
                   "user": ['john', 'mary', 'john', 'mary'],
                   'exercises': [7,9,3,2]},)


df['timestamp'] = pd.to_datetime(df['timestamp'])

df[df['timestamp'].dt.year == 2018]

输入

    timestamp   user    exercises
0   2018-01-01  john    7
1   2018-01-01  mary    9
2   2019-01-01  john    3
3   2020-01-01  mary    2

输出

timestamp   user    exercises
0   2018-01-01  john    7
1   2018-01-01  mary    9

答案 1 :(得分:0)

Control_MouseDoubleClick_1

尝试类似的方法,让我知道是否有帮助。

答案 2 :(得分:0)

使用Series.dt.year仅选择2018年:

# df['timestamp'] = pd.to_datetime(df['timestamp'])

df_new = df[df['timestamp'].dt.year == 2018]

print(df_new)
   timestamp  user  exercises
0 2018-01-01  John          7
1 2018-01-01  Mary          9
2 2018-02-01  John          3
3 2018-02-01  Mary          2
4 2018-03-01  John          1
5 2018-03-01  Mary          5

答案 3 :(得分:0)

如果您喜欢lambda,可以在下面使用:

如果时间戳是字符串:

df.loc[lambda df: df.timestamp.str[:4] == '2018']

如果时间戳记是日期:

df.loc[lambda df: (pd.to_datetime(df.timestamp)).dt.year == 2018]

答案 4 :(得分:0)

您的索引是DatetimeIndex吗?如果是这样,您可以致电data.loc["2018"]。在内部,pandas将“ 2018”视为2018年,并且由于.loc切片在两个边上都包含在内,因此请选择该年中的所有数据。