【问题标题】: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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多