从xlsb文件将日期格式化为MM / DD / YYY

时间:2019-03-27 23:12:48

标签: python pandas date

我有一个要使用熊猫进行分析的.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。

任何帮助将不胜感激!

2 个答案:

答案 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)

Credits

答案 1 :(得分:0)

假设您的日期列为“日期”,则命令将如下所示:

new.frame <- data.frame("sent_id" = NA, 
                        "recieved_id" = NA, 
                        "delay" = NA)