提问人:prashanth manohar 提问时间:10/27/2023 最后编辑:prashanth manohar 更新时间:10/27/2023 访问量:47
如何将 pandas 日期列读取为日期类型
How to read a pandas date column as date type
问:
我有这个代码。我可以下载电子表格并将工作表加载为数据框。但是“日期”列未按预期进行转换。
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'])
答:
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 日以来经过的天数):converters
read_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 之间的日期不准确!
评论