【问题标题】:pandas datetime columns problem and i don't know what i am missing熊猫日期时间列问题,我不知道我错过了什么
【发布时间】:2020-09-21 15:05:36
【问题描述】:

我是韩国学生

请理解英语很尴尬

我想让列日期时间>年,月....,秒

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

日期时间看起来像这样 (这是 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 访问器

请帮帮我ㅠㅅㅠ

【问题讨论】:

  • 请提供minimal reproducible example,以及整个错误输出。
  • 您的日期时间列实际上是一个日期时间对象吗?查看train['datetime'].dtype。如果是objectstring,您可以尝试将parse_dates=['datetime'] 添加到read_csv 调用中。或者在.dt 调用之前尝试train['datetime'] = pd.to_datetime(train['datetime'])
  • train['datetime'].dtype
  • dtype('O').....

标签: python pandas


【解决方案1】:

请注意,默认情况下 read_csv 能够推断列类型 对于数字和布尔列。 除非明确指定(例如传递 convertersdtype 参数),所有其他输入情况都保留为字符串 并且此类列的 pandasonic 类型是 object

这就是你的情况。 因此,由于此列是 object 类型,您不能调用 dt 访问器 在它上面,因为它只适用于 datetime 类型的列。

其实在这种情况下,你可以采取以下方法:

  • 不指定此列的任何转换(它将被解析 就像 object),
  • 之后将 datetime 列拆分为“部分”,使用 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 被用作类型名称(有各种 结局)。 所以最好在这里使用其他名称,至少不同 在 char 情况下,例如日期时间

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2018-12-07
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多