python - 为什么读入熊猫时日期列会失真?
问题描述
我从 URL 读取了一个 excel 文件,需要进行一些清理才能保存它。在原始的 excel 文件中,前几行有一些标志和空条目,然后才是真正的数据开始。excel 文件中的日期列(未命名 0:) 显示为日期,但由于某种原因读入 pandas 时,它会转换为数字。使用 astype 和 pd.to_datetime 将列转换为日期,但日期不正确。有什么建议吗?
注意:虽然日期列在excel表格中显示为日期,但它的类型是通用的。我可以先在 excel 文件中手动更改类型,但我不想这样做,因为我想自动化该过程。
如果要生成数据,代码如下:
from requests import get
import pandas as pd
url = 'http://rigcount.bakerhughes.com/static-files/55ff50da-ac65-410d-924c-fe45b23db298'
# make HTTP request to fetch data
r = get(url)
# check if request is success
r.raise_for_status()
# write out byte content to file
with open('out.xlsb', 'wb') as out_file:
out_file.write(r.content)
Canada_Oil_Gas = pd.read_excel('out.xlsb', sheet_name='Canada Oil & Gas Split', engine='pyxlsb')
解决方案
问题是由单元格格式[$-409]引起的。
您可以手动修复它,如下所示:
df = pd.read_excel('out.xlsb', sheet_name='Canada Oil & Gas Split',
skiprows=6, engine='pyxlsb')
df['DATE'] = pd.to_datetime('1899-12-31') + df['DATE'].sub(1).apply(pd.offsets.Day)
print(df.head())
# Output
DATE OIL GAS MISC TOTAL Oil Gas
0 2000-01-07 134 266 4 404 0.331683 0.658416
1 2000-01-14 169 342 6 517 0.326886 0.661509
2 2000-01-21 186 338 6 530 0.350943 0.637736
3 2000-01-28 171 381 6 558 0.306452 0.682796
4 2000-02-04 157 387 1 545 0.288073 0.710092
推荐阅读
- javascript - 在 JavaScript 中将数据动态添加到表的列中
- angular - Angular 6 不会将 X-XSRF-TOKEN 标头添加到 http 请求
- facebook - Facebook 应用审查政策
- sql - SQL Server 2008 update() 函数工作错误
- python - 使用 python 2 训练的 keras 模型在使用 python 3 调用预测函数时给出 nan 值
- c++ - c ++在终端中用回车重新打印文本
- java - 加载函数同时调用android
- permissions - 无法在 Vagrant 中挂载文件
- r - 没有使用 Rmisc 和 ggplot 的图例
- php - PHP按优先级排序数组