Панды преобразуют столбец в дату и время, но его тип не является датой и временем - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно преобразовать столбец данных в дату и время в пандах. Но его тип данных не тот, который я ожидаю.

>>> df = pd.DataFrame(['2009-11-27'], columns = ['my_col'])
>>> df.dtypes['my_col']
dtype('O')
>>> pd.to_datetime(df['my_col'], format='%Y-%m-%d',  errors = 'coerce')
 0   2009-11-27
 Name: my_col, dtype: datetime64[ns]
>>> df.dtypes['my_col']
dtype('O')
>>> df['my_col'] = pd.to_datetime(df['my_col'], format='%Y-%m-%d',  errors = 'coerce')
>>> df.dtypes['my_col']
dtype('<M8[ns]')
 >>> df['my_col'] = pd.to_datetime(df['my_col'], format='%Y-%m-%d',  errors = 'coerce')
  >>> df.dtypes['my_col']
  dtype('<M8[ns]')
  >>> df = pd.DataFrame(['2009-11-27'], columns = ['my_col'])
  >>> df['my_col'] = pd.to_datetime(df['my_col'], format='%Y-%m-%d',  errors = 'coerce')
  >>> df.dtypes['my_col']
 dtype('<M8[ns]')

Мне нужно получить тип данных столбца, чтобы мой код мог делать

 if df.dtypes['my_col'] in (np.datetime64, datetime.datetime):
      do something .....

Есть предложения?

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

используя серии с dtypes

df.iloc[0,:].dtypes
dtype('<M8[ns]')

Или

df.select_dtypes(include=[np.datetime64, 'datetime' ,'datetime64'])

С select_dtypes, ваш код может быть

df1=df.select_dtypes(include=[np.datetime64, 'datetime' ,'datetime64'])
do something
df2=df.drop(df1.columns,1)
do somthing
1 голос
/ 17 апреля 2019

Запрос атрибута dtype столбца напрямую, вы можете сделать что-то вроде

df['my_col'].dtype
# dtype('<M8[ns]')

np.issubdtype(df['my_col'].dtype, np.datetime64)
# True
0 голосов
/ 17 апреля 2019

pd.to_datetime не на месте. У вас в основном это было - просто нужно переназначить столбец после преобразования даты и времени.

>>> import pandas as pd
>>> df = pd.DataFrame(['2009-11-27'], columns = ['my_col'])
>>> df.dtypes['my_col']
dtype('O')
>>> df.my_col = pd.to_datetime(df['my_col'], format='%Y-%m-%d',  errors = 'coerce')
>>> df.dtypes['my_col']
dtype('<M8[ns]')

Вы можете использовать это, чтобы проверить, относится ли столбец к определенному типу - dtypes pandas на самом деле являются просто ntypty dtypes.

>>> type(df.my_col.dtype)
<class 'numpy.dtype'>

Вы можете найти список nty-n-типов здесь.

Так что это означает, что вы можете сделать сравнение, как это -

>>> import numpy as np
>>> df.dtypes['my_col'] == np.dtype('<M8[ns]')
True
>>> df.dtypes['my_col'] == np.dtype('<M8[ms]')
False
>>> df.dtypes['my_col'] in [np.dtype('<M8[ns]'), np.dtype('<M8[ms]')]
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...