Панды по умолчанию представляют даты с datetime64 [нс], поэтому в моих столбцах есть этот формат [2016-02-05 00:00:00], но я просто хочу дату 2016-02-05, поэтому я применил этот код для несколько столбцов:
df3a['MA'] = pd.to_datetime(df3a['MA'])
df3a['BA'] = pd.to_datetime(df3a['BA'])
df3a['FF'] = pd.to_datetime(df3a['FF'])
df3a['JJ'] = pd.to_datetime(df3a['JJ'])
.....
но в результате я получаю эту ошибку: TypeError: type unhashable: 'numpy.ndarray' мой вопрос: почему я получил эту ошибку и как преобразовать дату и время в дату для нескольких столбцов (около 50)?
буду признателен за вашу помощь
Один из способов добиться того, чего вы хотите, — это DatetimeIndex. Сначала я создал пример DataFrame со столбцами «дата» и «значения» и попытался воспроизвести полученную вами ошибку.
import pandas as pd
import numpy as np
# Example DataFrame with a DatetimeIndex (dti)
dti = pd.date_range('2020-12-01','2020-12-17') # dates from first of december up to date
values = np.random.choice(range(1, 101), len(dti)) # random values between 1 and 100
df = pd.DataFrame({'date':dti,'values':values}, index=range(len(dti)))
print(df.head())
>>> date values
0 2020-12-01 85
1 2020-12-02 100
2 2020-12-03 96
3 2020-12-04 40
4 2020-12-05 27
В примере только даты уже показаны без времени в столбце «дата», я думаю, поскольку это DatetimeIndex.
То, что я не тестировал, но может сработать для вас:
# Your dataframe
df3a['MA'] = pd.DatetimeIndex(df3a['MA'])
...
# automated transform for all columns (if all columns are datetimes!)
for label in df3a.columns:
df3a[label] = pd.DatetimeIndex(df3a[label])
Используйте DataFrame.apply:
cols = ['MA', 'BA', 'FF', 'JJ']
df3a[cols] = df3a[cols].apply(pd.to_datetime)