简体   繁体   English

pandas.DataFrame 过滤两个日期之间的数据

[英]pandas.DataFrame filtering data between two dates

I have date-time data which is stored in dataframe, as shown below.我有存储在数据框中的日期时间数据,如下所示。 this data frame includes more than 3 years data< example : 2015,2016, 2017 , 2018 and 2019 > as shown below此数据框包含3年以上的数据<示例2015、2016、2017、2018和2019 >如下图

0 2015-02-06 00:00:00  10.397
1 2015-02-06 00:15:00  10.541
2 2015-02-06 00:30:00  10.166
3 2015-02-06 00:45:00   9.187
4 2015-02-06 01:00:00   9.158
....

138699 2019-01-20 22:45:00  6.077
138700 2019-01-20 23:00:00  5.933
138701 2019-01-20 23:15:00  5.962
138702 2019-01-20 23:30:00  6.048
138703 2019-01-20 23:45:00  6.077


Name: 0, dtype: datetime64[ns]

Now I want filter data between two years, say 2015 and 2016 and convert it into Json format as follows,现在我想过滤两年之间的数据,比如 2015 和 2016 并将其转换为 Json 格式,如下所示,

[
  {
    "data": [
      [
        1423180800000,
        10.397
      ],
      [
        1423184400000,
        9.158
      ],
      [
        1423185300000,
        9.36
      ],
      [
        1423186200000,
        9.216
      ],
      [
        1423187100000,
        9.043
      ]
    ]
  }
]

Could you please let me know how can achieve this using python pandas.你能否让我知道如何使用 python pandas 来实现这一点。

Use:用:

print (df)
                  date    data
0  2015-02-06 00:00:00  10.397
1  2016-02-06 00:15:00  10.541
2  2017-02-06 00:30:00  10.166
3  2018-02-06 00:45:00   9.187
4  2019-02-06 01:00:00   9.158

import json

#convert column to datetimes
df['date'] = pd.to_datetime(df['date'])

#filter by years
df = df[df['date'].dt.year.between(2015, 2016)]
#convert to unix times
df['date'] = df['date'].astype(np.int64) // 10**6

#convert to lists
d = df.to_dict(orient='l')
print (d)
{'date': [1423180800000, 1454717700000], 'data': [10.397, 10.540999999999999]}

#create json by lists
j = json.dumps([{'data': list(map(list, zip(d['date'], d['data'])))}])
print (j)
[{"data": [[1423180800000, 10.397], [1454717700000, 10.540999999999999]]}]

very simple, set date column as datetime then sort data between two dates.let say start date 01/01/2015 and end date 31/12/2016.Then new data can be converted into json,lets try :很简单,将日期列设置为日期时间,然后在两个日期之间对数据进行排序。比如说开始日期 01/01/2015 和结束日期 31/12/2016。然后可以将新数据转换为 json,让我们尝试:

df['date'] = pd.to_datetime(df['date']) 
new_data=df[(df['date'] >= start_date) & (df['date'] <= end_date)]

new data contain only data between start and end date,it convert in to json as follows:新数据只包含开始和结束日期之间的数据,它转换为 json 如下:

j = new_data.to_json(orient='records')

To filter the data between two years:要过滤两年之间的数据:

df[0] = pd.to_datetime(df[0])
df = df[df[0].dt.year.between(2015, 2016)]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM