python - 将数据框列转换为字符串以应用 strftime
问题描述
我想从数据框中的另一列创建一weekday
列:Date
df
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
"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
为什么会这样?
解决方案
您的专栏df['Weekday']
还不是类型Datetime
。只有这样你才能调用方法.dt
。
df['Date'] = pd.to_datetime(df['Date'])
应该解决这个问题。
推荐阅读
- javascript - 为什么我在 Ionic-React 上的事件不起作用?
- javascript - 如何使用javascript逐字反转字符串中的单词?
- internet-explorer-11 - DataStudio 图表在 Internet Explorer 11 中的初始页面加载失败
- javascript - 增加对 map function() 和语法的理解
- audio - 使用 FFmpeg 或类似软件将视频中的音频标准化为 EBU R128 标准
- javascript - 我收到“不变违规”错误的渲染方法做错了什么?
- kotlin - 检查对象的类是否继承自特定的密封类
- java - 本地应用程序和 Jenkins 部署之间的 Java 日期时间不一致
- redux - Vuex 选择器,如 redux 重新选择
- python - 如何加快 python lxml 中的 xbrl 文件解析?