系列格式熊猫

时间:2020-03-05 00:20:56

标签: python-3.x pandas

XLS FILE

import pandas as pd
from datetime import datetime
import os

# get username
user = os.getlogin()


def file_process():
    data = pd.read_excel('C:\\Users\\' + user + '\\My Documents\\XINVST.xls')

    # Change the date and time formatting
    data["INVDAT"] = data["INVDAT"].apply(lambda x: datetime.combine(x, datetime.min.time()))
    data["INVDAT"] = data["INVDAT"].dt.strftime("%m-%d-%Y")

    print(data)

    # output to new file
    # new_data = data
    # new_data.to_excel('C:\\Users\\' + user + '\\Desktop\\XINVST.xls', index=None)


if __name__ == '__main__':
    file_process()

我正在尝试将INVDAT列设置为正确的日期格式,例如11/25/19,我尝试了多种解决方案,但始终遇到这样的错误:TypeError:Combine()参数1必须为datetime.date ,而不是int,然后我尝试将整数转换为日期类型,但也会出错。

3 个答案:

答案 0 :(得分:0)

或者您可以简单地使用df["INVDAT"] = pd.to_datetime(df["INVDAT"], format="%m/%d/%y"),在这种情况下,您不需要datetime包装。有关更多信息,请查看docs

答案 1 :(得分:0)

data['INVDAT'] = data['INVDAT'].astype('str')
data["INVDAT"] = pd.to_datetime(data["INVDAT"])
data["INVDAT"] = data["INVDAT"].dt.strftime("%m/%d/%Y")

此解决方案有效,但如果日期表示形式是单个月,例如12519(预期输出1/25/19),则它将失败。如果len()<6,我尝试使用条件语句在前面添加一个0,但这给了我dtype为int64的错误。

答案 2 :(得分:0)

import pandas as pd
import os

# get username
user = os.getlogin()


def file_process():
    data = pd.read_excel('C:\\Users\\' + user + '\\My Documents\\XINVST.xls')

    # Change the date and time formatting
    data['INVDAT'] = data['INVDAT'].astype('str')
    length = len(data['INVDAT'])
    data['INVDAT'].pop(length - 1)

    for i in data['INVDAT'].str.len():
        if i <= 5:
            data['INVDAT'] = data['INVDAT'].apply(lambda x: '{0:0>6}'.format(x))
            length = len(data['INVDAT'])
            data['INVDAT'].pop(length - 1)
            data["INVDAT"] = pd.to_datetime(data["INVDAT"])
            data["INVDAT"] = data["INVDAT"].dt.strftime("%m/%d/%Y")
        else:
            data["INVDAT"] = pd.to_datetime(data["INVDAT"])
            data["INVDAT"] = data["INVDAT"].dt.strftime("%m/%d/%Y")

    # output to new file
    new_data = data
    new_data.to_excel('C:\\Users\\' + user + '\\Desktop\\XINVST.xls', index=None)


if __name__ == '__main__':
    file_process()

这是解决方案,虽然草率,但有效