【问题标题】:Extracting the hour from a time column in pandas从熊猫的时间列中提取小时
【发布时间】:2019-09-22 10:08:00
【问题描述】:

假设我有以下数据集:

我将如何创建一个新列,作为时间的小时?

例如,下面的代码适用于个别时间,但我无法将其推广到 pandas 中的列。

t = datetime.strptime('9:33:07','%H:%M:%S')
print(t.hour)

【问题讨论】:

  • 你可以使用 lambda 函数:df['col'] = df['time'].apply(lambda x: x.hour)
  • 这会导致错误:AttributeError: 'str' object has no attribute 'hour'
  • 那是因为你的时间列是一个 str 而不是日期时间你需要先做df['time'] = pd.to_datetime(df['time'])
  • 啊,当然,谢谢克里斯。

标签: python pandas datetime


【解决方案1】:

to_datetimedt.hour 一起用于日期时间:

df = pd.DataFrame({'TIME':['9:33:07','9:41:09']})

#should be slowier
#df['hour'] = pd.to_datetime(df['TIME']).dt.hour

df['hour'] = pd.to_datetime(df['TIME'], format='%H:%M:%S').dt.hour
print (df)
      TIME  hour
0  9:33:07     9
1  9:41:09     9

如果想在TIME 列中使用datetimes 可以分配回:

df['TIME'] = pd.to_datetime(df['TIME'], format='%H:%M:%S')

df['hour'] = df['TIME'].dt.hour
print (df)
                 TIME  hour
0 1900-01-01 09:33:07     9
1 1900-01-01 09:41:09     9

【讨论】:

  • 要添加,最好先明确转换整个系列,即df['TIME'] = pd.to_datetime(df['TIME'])。然后,您还将看到记忆的好处。
【解决方案2】:

我的建议:

df = pd.DataFrame({'TIME':['9:33:07','9:41:09']})
df['hour']= df.TIME.str.extract("(^\d+):", expand=False)
  • “str.extract(...)”是一个向量化函数,它提取正则表达式模式(在我们的例子中是“(^\d+):”,即 TIME 的小时)并通过以下方式返回 Pandas Series 对象指定参数“expand=False”
  • 结果存储在“小时”列中

【讨论】:

    【解决方案3】:

    您可以使用 extract() 两次来突出“小时”列

    df['hour'] = df. TIME. str. extract("(\d+:)")
    df['hour'] = df. hour. str. extract("(\d+)")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 2016-07-27
      • 2020-06-02
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 2020-04-14
      相关资源
      最近更新 更多