我有一个要使用熊猫进行分析的.xlsb文件。我发现了如何使用pyxlsb打开文件并创建另一个数据集。但是,现在的问题是时间格式已更改为其他数字格式(例如41256)。
我目前使用的代码是:
dataset = []
with open_xlsb(file) as wb: #opening an xlsb file workbook
with wb.get_sheet(1) as sheet1:
for row in sheet1.rows():
dataset.append([item.v for item in row])
dataset= pd.DataFrame(dataset[1:], columns=dataset[0])
我已经尝试了convert_date,如下所示:
convert_date(dataset)
我也尝试过to_datetime函数,但是不确定是否正确使用了它。作为参考,我使用的数据集的日期在多列和多行中,因此我正在寻找一种方法将所有这些数据转换为正确的格式,同时忽略任何错误。
编辑:所以我没有一个带有“日期”的列,而是有多个列,例如StartDate,EndDate,Last Updated和其他一些列。我想看到的结果是,如果我转到一列,例如dataset.columns ['StartDate'],我想获取一个日期值,例如15/03/2019,而不是42156。
任何帮助将不胜感激!
答案 0 :(得分:2)
我遇到了类似的问题,但由于 this answer,我得以克服。
尝试 datetime.fromordinal
模块中的函数 datetime
,如下所示:
from datetime import datetime
# for integers
def convert_int_date(ordinal_date):
date_time = datetime.fromordinal(
datetime(1900, 1, 1).toordinal() + ordinal_date - 2
)
return date_time
dataset["StartDate"] = dataset["StartDate"].astype(int).apply(convert_int_date)
然后您可以随意设置日期格式。
dataset["StartDate"] = dataset["StartDate"].dt.strftime("%m/%d/%Y")
在我的特殊情况下,每个日期都由一个整数给出。不考虑小时、分钟和秒。如果您确实需要考虑这些(或者如果您有一个浮动数字作为日期),请尝试以下操作:
# for floats
def convert_float_date(ordinal_date):
hours, r = divmod(ordinal_date, 1)
minutes, r = divmod(r*60, 1)
seconds = r*60
date_time = datetime.fromordinal(
datetime(1900, 1, 1).toordinal() + ordinal_date - 2
)
datetime = date_time.replace(hour=hours, minute=minutes, second=seconds)
return date_time
dataset["StartDate"] = dataset["StartDate"].astype(float).apply(convert_float_date)
答案 1 :(得分:0)
假设您的日期列为“日期”,则命令将如下所示:
new.frame <- data.frame("sent_id" = NA,
"recieved_id" = NA,
"delay" = NA)