Python Forum
Convert SAS Dates Format in a loop - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Convert SAS Dates Format in a loop (/thread-17170.html)



Convert SAS Dates Format in a loop - MohanReddy - Apr-01-2019

import pandas as pd
Dates_Min_Max_Df = pd.read_sas("path/file.sas7bdat")
print(Dates_Min_Max_Df)
                Minimum_Date Maximum_Date
Close_dt        1.556669e+09 1.856563e+09
Open_dt         1.836669e+09 1.996669e+09
Current_Mth     1.986669e+09 1.556459e+09

def convert_sas_dates(df,field):
         df[field] = pd.to_timedelta(df[field], unit= 's') + pd.datetime(1960,1,1)
         return df
dt_list = ['Minimum_Date','Maximum_Date']
for field in dt_list:
         Dates_Min_Max_Df = convert_sas_dates(Dates_Min_Max_Df, field)
Error:
KeyError: 'Minimum_Date'
Quote:Required output

Output:
print(Dates_Min_Max_Df) Minimum_Date Maximum_Date Min_Date Max_Date Close_dt 1.556669e+09 1.856563e+09 2009-04-30 2010-04-30 Open_dt 1.836669e+09 1.996669e+09 2010-04-29 2011-04-30 Current_Mth 1.986669e+09 1.556459e+09 2010-03-30 2009-04-20

can someone help


RE: Convert SAS Dates Format in a loop - MohanReddy - Apr-02-2019

Can someone help or is there anything I am missing while raising a query?


RE: Convert SAS Dates Format in a loop - scidam - Apr-02-2019

Try something like this instead:

def convert_sas_dates(df, field, inplace=False, unit='s'):
    """Converts sas-formated column to standard.
    """
    if inplace:
        df.loc[:, field] = pd.to_timedelta(df.loc[:, field]) + pd.datetime(1960, 1, 1)
    else:
        df_ = df.copy()
        df_.loc[:, field] = pd.to_timedelta(df_.loc[:, field], unit=unit) + pd.datetime(1960,1,1)
        return df_