maxliu06 发表于 2020-8-17 11:19:27

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

如题所示。   读取到excel表的某列是日期;    打印时会输入成 5位的数字;有什么办法 可以转来字符串?      

Twilight6 发表于 2020-8-17 11:39:28



给部分数据看看

maxliu06 发表于 2020-8-17 11:46:17

如图

yhhpf 发表于 2020-8-17 13:05:58

maxliu06 发表于 2020-8-17 11:46
如图

Excel上是默认常规格式存储,如果不是文本存储的,可以用xldate_as_datetime()来转换为时间格式。

疾风怪盗 发表于 2020-8-17 13:26:22

读的时候,用dtype={列名:'datetime'}这样转换成日期类型不行么?

maxliu06 发表于 2020-8-17 13:40:48

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

是指在 pandas 读取excel 数据时, 指定该参数吗?

maxliu06 发表于 2020-8-17 13:42:15

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

咋用 {:5_99:}

yhhpf 发表于 2020-8-17 14:08:12

maxliu06 发表于 2020-8-17 13:42
咋用

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

yhhpf 发表于 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

maxliu06 发表于 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

maxliu06 发表于 2020-8-17 14:17:07

或者反过来,   5位数字 转来 月 日 的格式, 用python 有没有法子的??

BIO-张磊 发表于 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)

yhhpf 发表于 2020-8-17 16:11:06

本帖最后由 yhhpf 于 2020-8-17 16:14 编辑

pandas没试过这个,
你可以试下,excel记录日期数值格式,其实都是按照1900/1/0这个往后+日期数值(多少天),显示成对应的天数。

疾风怪盗 发表于 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['销售日期']=]
print(a)

页: [1]
查看完整版本: pandas 读取 excel 表时 日期变成了数字