簡體   English   中英

如何按日期對pandas數據幀進行排序

[英]How to sort a pandas dataframe by date

我正在將數據從Google BigQuery導入到pandas數據框中,我想按日期對結果進行排序。 我的代碼如下:

import sys, getopt
import pandas as pd
from datetime import datetime

# set your BigQuery service account private private key
pkey ='#REMOVED#'
destination_table = 'test.test_table_2'
project_id = '#REMOVED#'

# write your query
query = """
SELECT date, SUM(totals.visits) AS Visits
FROM `#REMOVED#.#REMOVED#.ga_sessions_20*`
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 3 day) and
DATE_sub(current_date(), interval 1 day)
GROUP BY Date
    """

data = pd.read_gbq(query, project_id, dialect='standard', private_key=pkey, parse_dates=True, index_col='date')
date = data.sort_index()

data.info()
data.describe()

print(data.head())

我的輸出如下所示,因為您可以看到日期未排序。

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
date      3 non-null object
Visits    3 non-null int32
dtypes: int32(1), object(1)
memory usage: 116.0+ bytes
       date  Visits
0  20180312  207440
1  20180310  178155
2  20180311  207452

我已經閱讀了幾個問題,到目前為止嘗試了以下內容,導致我的輸出沒有變化:

  • 刪除index_col='date'並添加date = data.sort_values(by='date')
  • 將日期列設置為索引,然后對索引進行排序(如上所示)。
  • 將標題( headers = ['Date', 'Visits'] )和dypes( dtypes = [datetime, int] )設置為我的read_gbq行( parse_dates=True, names=headers

我錯過了什么?

由於大部分工作都是在Google BigQuery方面完成的,我也會在那里進行排序:

query = """
SELECT date, SUM(totals.visits) AS Visits
FROM `#REMOVED#.#REMOVED#.ga_sessions_20*`
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 3 day) and
DATE_sub(current_date(), interval 1 day)
GROUP BY Date
ORDER BY Date
"""

這應該工作:

data.sort_values('date', inplace=True)

我設法通過將我的日期字段轉換為datetime對象來解決這個問題,我假設這將由parse_date=True自動完成,但似乎只會解析現有的 datetime對象。

我在查詢后添加了以下內容,從我的日期字符串創建一個新的datetime列,然后我能夠使用data.sort_index()並且它按預期工作:

time_format = '%Y-%m-%d'
data = pd.read_gbq(query, project_id, dialect='standard', private_key=pkey)

data['n_date'] = pd.to_datetime(data['date'], format=time_format)  

data.index = data['n_date']

del data['date']
del data['n_date']

data.index.names = ['Date']

data = data.sort_index()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM