【问题标题】:convert datetime to date python --> error: unhashable type: 'numpy.ndarray'将日期时间转换为日期 python --> 错误:不可散列的类型:'numpy.ndarray'
【发布时间】:2021-03-28 00:01:37
【问题描述】:
默认情况下,熊猫用 datetime64 [ns] 表示日期,所以我的列中有这种格式 [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 列)的日期?
我会感谢你的帮助
【问题讨论】:
标签:
python-3.x
pandas
date
datetime
jupyter-notebook
【解决方案1】:
实现您想要的一种方法是使用 DatetimeIndex。我首先创建了一个带有 'date' 和 'values' 列的示例 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])
【解决方案2】:
使用DataFrame.apply:
cols = ['MA', 'BA', 'FF', 'JJ']
df3a[cols] = df3a[cols].apply(pd.to_datetime)