python |
您所在的位置:网站首页 › python怎么根据日期得到星期数 › python |
我使用的是 Python 3.6 和 Pandas 0.20.3。 我有一列已从日期时间转换为日期类型。我只需要日期。为了便于使用,我将其作为派生列。但是我希望通过星期几的计算来做一些进一步的操作。我可以从日期时间类型中获取星期几,但不能从日期中获取。在我看来,这应该是可能的,但我尝试了多种变体,但没有成功。 这是一个例子: import numpy as np import pandas as pd df = pd.DataFrame({'date':['2017-5-16','2017-5-17']}) df['trade_date']=pd.to_datetime(df['date'])我可以从日期时间列“trade_date”中获取星期几。 df['dow']=df['trade_date'].dt.dayofweek df date trade_date dow 0 2017-5-16 2017-05-16 1 1 2017-5-17 2017-05-17 2但是如果我有一个日期,而不是一个日期时间,那就不行了: 例如: df['trade_date_2']=pd.to_datetime(df['date']).dt.date然后: df['dow_2']=df['trade_date_2'].dt.dayofweek我得到(最后): AttributeError: Can only use .dt accessor with datetimelike values我尝试了 dayofweek()、weekday、weekday() 的各种组合,我意识到,这突出了我对 Pandas 的确切工作原理的无知。那么...除了添加另一列是列 trade_date 的日期时间版本之外还有什么建议吗? 我也欢迎解释为什么这不起作用。 最佳答案 存在的问题是 pandas datetime(时间戳)在实现 .dt 方法和 python date 之间存在差异。 #return python date df['trade_date_2']= pd.to_datetime(df['date']).dt.date print (df['trade_date_2'].apply(type)) 0 1 Name: trade_date_2, dtype: object #cannot work with python date df['dow_2']=df['trade_date_2'].dt.dayofweek需要转换为pandas datetime: df['dow_2']= pd.to_datetime(df['trade_date_2']).dt.dayofweek print (df) date trade_date_2 dow_2 0 2017-5-16 2017-05-16 1 1 2017-5-17 2017-05-17 2所以最好的方法是使用: df['date'] = pd.to_datetime(df['date']) print (df['date'].apply(type)) 0 1 Name: date, dtype: object df['trade_date_2']= df['date'].dt.date df['dow_2']=df['date'].dt.dayofweek print (df) date trade_date_2 dow_2 0 2017-05-16 2017-05-16 1 1 2017-05-17 2017-05-17 2编辑: 谢谢Bharath shetty对于使用 python date 的解决方案 - 因 NaT 而失败: df = pd.DataFrame({'date':['2017-5-16',np.nan]}) df['trade_date_2']= pd.to_datetime(df['date']).dt.date df['dow_2'] = df['trade_date_2'].apply(lambda x: x.weekday())AttributeError: 'float' object has no attribute 'weekday' 比较解决方案: df = pd.DataFrame({'date':['2017-5-16','2017-5-17']}) df = pd.concat([df]*10000).reset_index(drop=True) def a(df): df['trade_date_2']= pd.to_datetime(df['date']).dt.date df['dow_2'] = df['trade_date_2'].apply(lambda x: x.weekday()) return df def b(df): df['date1'] = pd.to_datetime(df['date']) df['trade_date_21']= df['date1'].dt.date df['dow_21']=df['date1'].dt.dayofweek return (df) def c(df): #dont write to column, but to helper series dates = pd.to_datetime(df['date']) df['trade_date_22']= dates.dt.date df['dow_22']= dates.dt.dayofweek return (df) In [186]: %timeit (a(df)) 10 loops, best of 3: 101 ms per loop In [187]: %timeit (b(df)) 10 loops, best of 3: 90.8 ms per loop In [188]: %timeit (c(df)) 10 loops, best of 3: 91.9 ms per loop关于python - Pandas 从日期类型列中获取星期几,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46515267/ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |