【问题标题】:Convert dataframe column to string to apply strftime将数据框列转换为字符串以应用 strftime
【发布时间】:2020-07-15 01:50:26
【问题描述】:

我想从数据框 df 中的另一列 Date 创建一个 weekday 列:

        id      timestamp               data    Date
27001   27242   2020-01-01 09:07:21.277 19.5    2020-01-01
27002   27243   2020-01-01 09:07:21.377 19.0    2020-01-01
27581   27822   2020-01-02 07:53:05.173 19.5    2020-01-02

有代码

df['Date'] = pd.Series(df['Date'], dtype="string")

# df['Date'] = pd.Series(df['Date'], dtype=pd.StringDtype)
# df['Date'] = df['Date'].astype(str)
datetime.datetime.strptime(df['Date'], '%Y-%m-%d').strftime('%A')

基于这些帖子: post1 post2

但发生错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-24-bd59bae0ddd9> in <module>()
      3 
      4 # df['Date'] = df['Date'].astype(str)
----> 5 datetime.datetime.strptime(df['Date'], '%Y-%m-%d').strftime('%A')
      6 # type(df['Date'])

TypeError: strptime() argument 1 must be str, not Series

Date 列创建"day of week" 列的最佳方法是什么?


更新:

试过了

df['Weekday'] = df['Date'].weekday

返回的

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-27-f788d4a4608d> in <module>()
      1 
----> 2 df['Weekday'] = df['Date'].weekday

/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in __getattr__(self, name)
   5272             if self._info_axis._can_hold_identifiers_and_holds_name(name):
   5273                 return self[name]
-> 5274             return object.__getattribute__(self, name)
   5275 
   5276     def __setattr__(self, name: str, value) -> None:

AttributeError: 'Series' object has no attribute 'weekday'

然后尝试

df['Weekday'] = df['Date'].dt.weekday

返回的

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-28-592865ef8c59> in <module>()
      1 
----> 2 df['Weekday'] = df['Date'].dt.weekday

2 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/indexes/accessors.py in __new__(cls, data)
    336             return DatetimeProperties(data, orig)
    337 
--> 338         raise AttributeError("Can only use .dt accessor with datetimelike values")

AttributeError: Can only use .dt accessor with datetimelike values

为什么会这样?

【问题讨论】:

  • df['Weekday'] = pd.to_datetime(df['Date']).apply(lambda x: x.strftime('%A'))
  • @VorsprungdurchTechnik 谢谢你的工作,实际上我想在stackoverflow.com/q/60922726/11901732 的情节标题中插入weekday。我可以在那个问题中应用这个解决方案吗?
  • 哦,是的,这是一个更好的解决方案。那你为什么问这个问题?
  • @VorsprungdurchTechnik 这是我想解决但被卡住的实际问题。所以不得不退后一步,重新考虑一种不同的方法..

标签: python pandas numpy dataframe datetime


【解决方案1】:

您的专栏df['Weekday'] 还不是Datetime 类型。只有这样才能调用方法.dt

df['Date'] = pd.to_datetime(df['Date'])

应该解决这个问题。

【讨论】:

  • 谢谢,现在可以使用了。附言。我想你的意思是df['Date'] = pd.to_datetime(df['Date'])
【解决方案2】:

对于 Date 列的数据类型为 str 的初始数据框,您可以这样做:

df['Weekday'] = pd.to_datetime(df['Date']).apply(lambda x : x.weekday())

另一种方法是:

df['Weekday'] =  pd.to_datetime(df['date']).dt.weekday

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 2019-04-28
    • 2022-08-17
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2017-12-19
    相关资源
    最近更新 更多