python - 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
解决方案
您的列似乎time_date
没有被转换为 datetime64 对象。尝试添加utc=True
到pd.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。
推荐阅读
- c# - 无法在对象“dbo.Addresses”中插入重复键
- javascript - 在 React 应用程序中加载外部 js 脚本
- sql - 仅使用 SELECT 的 SQL 子查询
- c# - 通过引用设置 MapIcon 图像
- python - 选择两个标题锚标记之间的所有内容
- c# - 'Random' 是 'UnityEngine.Random' 和 'System.Random' 之间的模棱两可的引用,我的错误在哪里?
- python - 如何使用正则表达式从字符串创建字典以获取组?
- flutter - 颤振中的视频播放器问题
- google-apps-script - 无法为应用脚本配置标准 Google Cloud Platform 项目
- html - 将导航栏定位在 div 的垂直中心