首页 > 解决方案 > DataFrame AttributeError:“索引”对象没有属性“日期”

问题描述

我可以确认我将索引设置为我的数据框

df.set_index('time_date', inplace=True)
df.head()
                  Unnamed: 0    lid t_user_id   collected_time  latitude    longitude   altitude    transportation_mode
time_date                               
2008-04-01 11:30:37-03:00   0   1   10  2008-04-01 11:30:37-03  39.475128   75.999173   -777.0  walk
2008-04-01 11:31:38-03:00   1   1   10  2008-04-01 11:31:38-03  39.474785   75.999100   -777.0  walk
2008-04-01 11:32:37-03:00   2   1   10  2008-04-01 11:32:37-03  39.474385   75.999417   -777.0  walk
2008-04-01 11:33:36-03:00   3   1   10  2008-04-01 11:33:36-03  39.473852   75.999690   -777.0  walk
2008-04-01 11:34:35-03:00   4   1   10  2008-04-01 11:34:35-03  39.473417   76.000253   -777.0  walk

但是,每次我将数据框传递给 myclass 对象时,都会收到此错误消息。

ts_obj = ts.TrajectorySegmentation(df)
ts_obj.load_data()
65         # sort data first
     66         #self.raw_data=self.raw_data.sort_index()
---> 67         self.row_data['day'] = self.row_data.index.date
     68 
     69         # preprocessing

AttributeError: 'Index' object has no attribute 'date'

类定义:enter code here

class TrajectorySegmentation:
    def __init__(self, rowData=pd.DataFrame()):
        self.row_data = rowData

    def load_data(self, **kwargs):
        src = self.row_data

我无法弄清楚 python 抱怨的库中的第 67 行有什么问题,但这里是包含第 67 行的片段

65  # sort data first
66  #self.raw_data=self.raw_data.sort_index()
67  self.row_data['day'] = self.row_data.index.date
68

编辑

尝试了其中一个答案,同样的错误,截图: 在此处输入图像描述

编辑-2

样本数据

!cat sample.csv
time_date,Unnamed: 0,lid,t_user_id,collected_time,latitude,longitude,altitude,transportation_mode
2008-04-01 11:30:37-03:00,0,1,10,2008-04-01 11:30:37-03,39.47512800000001,75.999173,-777.0,walk
2008-04-01 11:31:38-03:00,1,1,10,2008-04-01 11:31:38-03,39.474785,75.9991,-777.0,walk
2008-04-01 11:32:37-03:00,2,1,10,2008-04-01 11:32:37-03,39.474385,75.99941700000002,-777.0,walk
2008-04-01 11:33:36-03:00,3,1,10,2008-04-01 11:33:36-03,39.473852,75.99969,-777.0,walk
2008-04-01 11:34:35-03:00,4,1,10,2008-04-01 11:34:35-03,39.473417,76.000253,-777.0,walk

标签: pythonpandas

解决方案


您的列似乎time_date没有被转换为 datetime64 对象。尝试添加utc=Truepd.to_datetime.

这个片段有效:

import pandas as pd

df = pd.read_csv('sample.csv', delimiter=',', header=0, index_col=False)

# convert time_date col to datetime64 dtype
df['time_date'] = pd.to_datetime(df['time_date'], utc=True)

df.set_index('time_date', inplace=True)

print(df.index.date)

输出

[datetime.date(2008, 4, 1) datetime.date(2008, 4, 1)
 datetime.date(2008, 4, 1) datetime.date(2008, 4, 1)
 datetime.date(2008, 4, 1)]

编辑:您可以使用df.info()仔细检查您的列是正确的 dtypes。


推荐阅读