首页 > 解决方案 > 将数据框列转换为字符串以应用 strftime

问题描述

我想从数据框中的另一列创建一weekday列:Datedf

        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

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


更新:

试过了

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

为什么会这样?

标签: pythonpandasnumpydataframedatetime

解决方案


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

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

应该解决这个问题。


推荐阅读