繁体   English   中英

pandas 日期时间列问题,我不知道我错过了什么

[英]pandas datetime columns problem and i don't know what i am missing

我是韩国学生

请理解英语很尴尬

我想让列 datetime > year,mounth.... ,second

train = pd.read_csv('input/Train.csv')

DateTime 看起来像这样(这是 head(20),我删除了其他容易看到的列)

    datetime

0   2011-01-01 00:00:00
1   2011-01-01 01:00:00 
2   2011-01-01 02:00:00
3   2011-01-01 03:00:00
4   2011-01-01 04:00:00
5   2011-01-01 05:00:00
6   2011-01-01 06:00:00 
7   2011-01-01 07:00:00
8   2011-01-01 08:00:00
9   2011-01-01 09:00:00
10  2011-01-01 10:00:00
11  2011-01-01 11:00:00
12  2011-01-01 12:00:00
13  2011-01-01 13:00:00
14  2011-01-01 14:00:00
15  2011-01-01 15:00:00
16  2011-01-01 16:00:00
17  2011-01-01 17:00:00
18  2011-01-01 18:00:00
19  2011-01-01 19:00:00

然后我编写这段代码来查看每一列(年、月、日、小时、分钟、秒)

train['year'] = train['datetime'].dt.year

train['month'] = train['datetime'].dt.month

train['day'] = train['datetime'].dt.day

train['hour'] = train['datetime'].dt.hour

train['minute'] = train['datetime'].dt.minute

train['second'] = train['datetime'].dt.seond

和这样的错误

AttributeError: 只能使用带有 datetimelike 值的 .dt 访问器

请帮帮我ㅠㅅㅠ

请注意,默认情况下read_csv只能推断数字和 boolean 列的列类型。 除非明确指定(例如传递转换器dtype参数),否则所有其他输入情况都保留为字符串,并且此类列的pandasonic类型为object

就在你的情况下发生了这种情况。 因此,由于此列是object类型,因此您不能在其上调用dt访问器,因为它仅适用于datetime类型的列。

实际上,在这种情况下,您可以采取以下方法:

  • 不要指定此列的任何转换(它将被解析为object ),
  • 日期时间列拆分为“部分”之后,使用str.split (所有 6 列都带有一条指令),
  • 在生成的 DataFrame 中设置正确的列名,
  • 将它加入到原来的 DataFrame (然后下降),
  • 直到现在更改原始列的类型。

为此,您可以运行:

wrk = df['datetime'].str.split(r'[- :]', expand=True).astype(int)
wrk.columns = ['year', 'month', 'day', 'hour', 'minute', 'second']
df = df.join(wrk)
del wrk
df['datetime'] = pd.to_datetime(df['datetime'])

请注意,我添加了astype(int) 否则,这些列将保留为object (实际上是string )类型。

或者也许不再需要这个原始列(因为您已经提取了所有日期/时间组件)? 在这种情况下,删除此列而不是转换它。

最后一个提示: datetime被用作类型名称(带有各种结尾)。 因此,最好在此处使用其他名称,至少在字符大小写上有所不同,例如DateTime

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM