【发布时间】: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')
但发生错误:
---------------------------------------------------------------------------
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