[Python] Leave dates as strings using read_excel function from pandas in python

Discussão em 'Python' iniciado por Stack, Setembro 11, 2024.

  1. Stack

    Stack Membro Participativo

    Python 2.7.10
    Tried pandas 0.17.1 -- function read_excel
    Tried pyexcel 0.1.7 + pyexcel-xlsx 0.0.7 -- function get_records()

    When using pandas in Python is it possible to read excel files (formats: xls, xlsx) and leave columns containing date or date + time values as strings rather than auto-converting to datetime.datetime or timestamp types?

    If this is not possible using pandas can someone suggest an alternate method/library to read xls, xlsx files and leave date column values as strings?

    For the pandas solution attempts the df.info() and resulting date column types are shown below:

    >>> df.info()
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 117 entries, 0 to 116
    Columns: 176 entries, Mine to Index
    dtypes: datetime64[ns](2), float64(145), int64(26), object(3)
    memory usage: 161.8+ KB
    >>> type(df['Start Date'][0])
    Out[6]: pandas.tslib.Timestamp
    >>> type(df['End Date'][0])
    Out[7]: pandas.tslib.Timestamp


    Attempt/Approach 1:

    def read_as_dataframe(filename, ext):
    import pandas as pd
    if ext in ('xls', 'xlsx'):
    # problem: date columns auto converted to datetime.datetime or timestamp!
    df = pd.read_excel(filename) # unwanted - date columns converted!

    return df, name, ext


    Attempt/Approach 2:

    import pandas as pd
    # import datetime as datetime
    # parse_date = lambda x: datetime.strptime(x, '%Y%m%d %H')
    parse_date = lambda x: x
    elif ext in ('xls', 'xlsx', ):
    df = pd.read_excel(filename, parse_dates=False)
    date_cols = [df.columns.get_loc(c) for c in df.columns if c in ('Start Date', 'End Date')]
    # problem: date columns auto converted to datetime.datetime or timestamp!
    df = pd.read_excel(filename, parse_dates=date_cols, date_parser=parse_date)


    And have also tried pyexcel library but it does the same auto-magic convert behavior:

    Attempt/Approach 3:

    import pyexcel as pe
    import pyexcel.ext.xls
    import pyexcel.ext.xlsx

    t0 = time.time()
    if ext == 'xlsx':
    records = pe.get_records(file_name=filename)
    for record in records:
    print("start date = %s (type=%s), end date = %s (type=%s)" %
    (record['Start Date'],
    str(type(record['Start Date'])),
    record['End Date'],
    str(type(record['End Date'])))
    )

    Continue reading...

Compartilhe esta Página