Home > Software engineering >  Problem: Pandas - Slicing a datetime64[ns] column returns a list of 19-digit integers
Problem: Pandas - Slicing a datetime64[ns] column returns a list of 19-digit integers

Time:05-10

I am trying to convert a column of dates in a dataframe to a list, but something is happening when I slice it that turns the dates into 19-digit integers. This is the original df along with the column dtypes:

          CalendarDate  BusinessDay
    2   2022-05-04            1
    3   2022-05-03            1
    4   2022-05-02            1
    5   2022-04-29            1
    6   2022-04-28            1
    7   2022-04-27            1
    8   2022-04-26            1
CalendarDate    datetime64[ns]
BusinessDay              int64
dtype: object

This is the function that turns a dataframe column into a list:

def slice_single_dataframe_column_into_list(dataframe, column_name):
     sliced_column = dataframe.loc[:,[column_name]].values.tolist()
     print(sliced_column)
     column_list = []
     for element in sliced_column:
         column_list.append(element)
     return column_list

This is what is printed after the column is sliced:

[[1651622400000000000], [1651536000000000000], [1651449600000000000], [1651190400000000000], [1651104000000000000], [1651017600000000000], [1650931200000000000]]

I have tried converting that int as if it was a timestamp, but I get 'invalid arguement'. I'm just not sure what is happening here. I would like the items in the list to look exactly as they do in the dataframe.

CodePudding user response:

pd.to_datetime('1970-01-01').value returns the UNIX timestamp and df[datetimecolumn].values.tolist() seems returns the UNIX timestamp directly.

You can avoid by calling tolist on Series directly.

def slice_single_dataframe_column_into_list(dataframe, column_name):
     sliced_column = dataframe[column_name].tolist()
     # ^^ Changes here
     column_list = []
     for element in sliced_column:
         column_list.append(element)
     return column_list
  • Related