如何将 pandas 日期列读取为日期类型

How to read a pandas date column as date type

提问人:prashanth manohar 提问时间:10/27/2023 最后编辑:prashanth manohar 更新时间:10/27/2023 访问量:47

问:

我有这个代码。我可以下载电子表格并将工作表加载为数据框。但是“日期”列未按预期进行转换。

import requests
import pandas as pd

def get_BH_spreadsheet(URLS, SPREADSHEET_NAME):
    resp = requests.get(URLS)
    output = open(SPREADSHEET_NAME, 'wb')
    output.write(resp.content)
    output.close()
    df_NA_RIG_COUNT = pd.read_excel(open(SPREADSHEET_NAME, 'rb'), sheet_name='US Oil & Gas Split', index_col=None,header = 'infer', skiprows=6)
    df_NA_RIG_COUNT['Date'] = pd.to_datetime(df_NA_RIG_COUNT['Date'] )
    
    return df_NA_RIG_COUNT

通过传递 URL 和文件名,我们得到数据框。

get_BH_spreadsheet('https://rigcount.bakerhughes.comstatic-files/027e0bcc-86ec-407b-9029-b5bd3bf1982b', 'North America Rotary Rig Count - Jan 2000 - Current.xlsx')

然而,这并没有给出预期的结果。我可以做些什么来获得正确的日期时间类型?

df_NA_RIG_COUNT['Date'] = pd.to_datetime(df_NA_RIG_COUNT['Date'])
Python Pandas DataFrame 日期时间

评论


答:

0赞 Abdullah Al Mamun 10/27/2023 #1

如果 pd.to_datetime 函数未按预期解析日期列,则可能无法正确识别 Excel 文件中的日期格式。可以使用 pd.to_datetime 函数的 format 参数显式指定日期格式,以确保正确分析日期格式。

例:

df_NA_RIG_COUNT['Date'] = pd.to_datetime(df_NA_RIG_COUNT['Date'], format='%Y-%m-%d')

1赞 Corralien 10/27/2023 #2

用作转换 excel 日期的参数(自 1899 年 12 月 30 日以来经过的天数):convertersread_excel

df_NA_RIG_COUNT = pd.read_excel(
    'north_america_rotary_rig_count_jan_2000_-_current.xlsb',
    sheet_name='US Oil & Gas Split', skiprows=6, 
    converters={'Date': lambda x: pd.to_datetime(x, unit='D', origin='1899-12-30')}
)

# OR
df_NA_RIG_COUNT['Date'] = pd.to_datetime(df_NA_RIG_COUNT['Date'], 
                                         unit='D', origin='1899-12-30')

输出:

>>> df_NA_RIG_COUNT
           Date  Oil  Gas  Misc  Total     % Oil     % Gas
0    1987-07-17  559  337    26    922  0.606291  0.365510
1    1987-07-24  565  331    21    917  0.616140  0.360960
2    1987-07-31  605  346    22    973  0.621788  0.355601
3    1987-08-07  613  349    21    983  0.623601  0.355036
4    1987-08-14  620  352    26    998  0.621242  0.352705
...         ...  ...  ...   ...    ...       ...       ...
1888 2023-09-22  507  118     5    630  0.804762  0.187302
1889 2023-09-29  502  116     5    623  0.805778  0.186196
1890 2023-10-06  497  118     4    619  0.802908  0.190630
1891 2023-10-13  501  117     4    622  0.805466  0.188103
1892 2023-10-20  502  118     4    624  0.804487  0.189103

[1893 rows x 7 columns]

评论

0赞 prashanth manohar 10/27/2023
我得到了正确的答案。但是不明白origin = '1899-12-30'。我在哪里可以读到这个?大熊猫文件提到朱利安的起源是公元前 4713 年 1 月 1 日。提到 1899 年只是为了包括 20 世纪的所有年份吗?
0赞 Corralien 10/27/2023
Excel 日期的原点是 1900-1-1。使用 1899-12-30 有一个不明原因。我认为这是因为 Excel 将 1900 年视为闰年。
0赞 Corralien 10/27/2023
(所以我的代码对于 1900-1-1 和 1900-2-28 之间的日期不准确!