鱼C论坛

 找回密码
 立即注册
查看: 8919|回复: 13

pandas 读取 excel 表时 日期变成了数字

[复制链接]
发表于 2020-8-17 11:19:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题所示。     读取到excel表的某列是日期;    打印时会输入成 5位的数字;  有什么办法 可以转来  字符串?      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-17 11:39:28 | 显示全部楼层


给部分数据看看

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-17 11:46:17 | 显示全部楼层
如图
1.png
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-17 13:05:58 | 显示全部楼层

Excel上是默认常规格式存储,如果不是文本存储的,可以用xldate_as_datetime()来转换为时间格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-17 13:26:22 | 显示全部楼层
读的时候,用dtype={列名:'datetime'}这样转换成日期类型不行么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-17 13:40:48 | 显示全部楼层
疾风怪盗 发表于 2020-8-17 13:26
读的时候,用dtype={列名:'datetime'}这样转换成日期类型不行么?

是指在 pandas 读取excel 数据时, 指定该参数吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-17 13:42:15 | 显示全部楼层
yhhpf 发表于 2020-8-17 13:05
Excel上是默认常规格式存储,如果不是文本存储的,可以用xldate_as_datetime()来转换为时间格式。

咋用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-17 14:08:12 | 显示全部楼层

import xlrd
data = xlrd.open_workbook('1.xlsx')

table = data.sheet_by_name('Sheet1')
cell_value1 = table.cell(0,0).value
print(cell_value1)
cell_value2 = xlrd.xldate.xldate_as_datetime(table.cell(0,0).value, 1)
print(cell_value2)

输出结果如下:
44060.0
2024-08-18 00:00:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-17 14:10:58 | 显示全部楼层
可以使用table.cell(i,j).ctype
或者
type(table.cell_value(i, j)来判断数据类型。
数字一律按浮点型输出,日期输出成一串小数,布尔型输出0或1,所以必须在程序中做判断处理转换成想要的数据类型
xlrd的数据类型有:
0 empty,
1 string,
2 number,
3 date,
4 boolean,
5 error
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-17 14:13:51 | 显示全部楼层
yhhpf 发表于 2020-8-17 14:10
可以使用table.cell(i,j).ctype
或者
type(table.cell_value(i, j)来判断数据类型。

我是想用pandas   不是xlrd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-17 14:17:07 | 显示全部楼层
或者反过来,   5位数字 转来 月 日 的格式, 用python 有没有法子的??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-17 15:00:37 | 显示全部楼层
本帖最后由 BIO-张磊 于 2020-8-17 15:05 编辑

定义一个函数
def date(para):
    delta = pd.Timedelta(str(para)+'days')
    time = pd.to_datetime('1899-12-30') + delta
    return time
之后使用apply函数,将这个函数传进去
df['销售日期'].apply(date)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-17 16:11:06 | 显示全部楼层
本帖最后由 yhhpf 于 2020-8-17 16:14 编辑

pandas没试过这个,
你可以试下,excel记录日期数值格式,其实都是按照1900/1/0这个往后+日期数值(多少天),显示成对应的天数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-30 01:14:23 | 显示全部楼层
maxliu06 发表于 2020-8-17 14:17
或者反过来,   5位数字 转来 月 日 的格式, 用python 有没有法子的??

17楼给的函数是对的,或者也可以用datetime来处理
import pandas as pd
import datetime

def checkdatetime(number):
    date1 = datetime.datetime(1900, 1, 1)#excel存储日期的基准日
    print(date1)
    date2 = date1 + datetime.timedelta(days=int(number) - 2)#调整日期
    print(date2)
    return date2

def date(para):
    delta = pd.Timedelta(str(int(para)-2)+'days')
    print(delta)
    time = pd.to_datetime('1900-1-1') + delta
    print(time)
    return time

a=pd.read_excel('4.xlsx')
print(a.info())
print(a)
a['销售日期']=[date(i) for i in a['销售日期']]
print(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 02:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表