【问题标题】:pandas.DataFrame filtering data between two datespandas.DataFrame 过滤两个日期之间的数据
【发布时间】:2020-01-02 10:52:02
【问题描述】:

我有存储在数据框中的日期时间数据,如下所示。该数据框包含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]

现在我想要过滤两年之间的数据,比如2015年和2016年,并将其转换为Json格式,如下所示,

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

请告诉我如何使用 python pandas 实现这一点。

【问题讨论】:

  • 可以加print (df.head())吗?有 2 列?

标签: python pandas dataframe


【解决方案1】:

用途:

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]]}]

【讨论】:

  • yours answer perefect ,但 d.to_json(orient='values') 将为 json 格式提供 90% 只需添加额外的 dict 对象像这样 [ {data:[]}] 我们需要循环整个数据吗?
【解决方案2】:

非常简单,将日期列设置为日期时间,然后在两个日期之间对数据进行排序。假设开始日期 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)]

新数据只包含开始和结束日期之间的数据,它转换为json如下:

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

【讨论】:

  • 如何将 df_to_json() 附加到新的字典中,{data: [.....]}?
【解决方案3】:

过滤两年之间的数据:

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

【讨论】:

  • 谢谢你的回答,但是这个df.mydate是什么
  • 这是您的日期栏。数据框中有日期的列的名称是什么?
  • 我没有给列命名,是否需要给列命名?
  • @niran 看起来它叫0,所以我已经更新了我的答案
  • 得到这个错误,{AttributeError}Can only use .dt accessor with datetimelike values
猜你喜欢
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多