Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获得一个月的最后一天的日期列表_Python_Pandas_Datetime - Fatal编程技术网

Python 如何获得一个月的最后一天的日期列表

Python 如何获得一个月的最后一天的日期列表,python,pandas,datetime,Python,Pandas,Datetime,我为我的问题找到了不同的解决方案,但我找到了正确的答案。所以现在我要问: 我想在列表中找到一个月的最后一天。。。每次出现以下错误时: AttributeError: 'RangeIndex' object has no attribute 'month' 我是这样开始的: temp=pandas.read_csv(filename, delimiter=',') dates=pandas.to_datetime(temp['Var1']) 0 2017-01-01 06:00:00

我为我的问题找到了不同的解决方案,但我找到了正确的答案。所以现在我要问:

我想在列表中找到一个月的最后一天。。。每次出现以下错误时:

AttributeError: 'RangeIndex' object has no attribute 'month'
我是这样开始的:

temp=pandas.read_csv(filename, delimiter=',')
dates=pandas.to_datetime(temp['Var1'])
0      2017-01-01 06:00:00
1      2017-01-01 07:00:00
2      2017-01-01 08:00:00
...
Name: Var1, Length: 4053, dtype: datetime64[ns]
我得到了这样一份清单:

temp=pandas.read_csv(filename, delimiter=',')
dates=pandas.to_datetime(temp['Var1'])
0      2017-01-01 06:00:00
1      2017-01-01 07:00:00
2      2017-01-01 08:00:00
...
Name: Var1, Length: 4053, dtype: datetime64[ns]
列表中遗漏了不同的日期,例如,某些月份只能有10天

我使用了以下代码

dates[dates.groupby(dates.index.month).apply(lambda s: np.max(s.index))].tolist()
试试这个:

import pandas as pd
df = pd.DataFrame({'a':['2017-01-01 06:00:00',
                        '2017-01-01 07:00:00',
                        '2017-02-02 08:00:00']})
df['a'] = pd.to_datetime(df['a'])
print(df['a'].groupby(df.a.dt.to_period("M")).apply(lambda x: x.values.max()))
输出:

a
2017-01   2017-01-01 07:00:00
2017-02   2017-02-02 08:00:00
Freq: M, Name: a, dtype: datetime64[ns]

如果其他解决方案仅使用
.month
值,则可能会忽略不同年份之间的差异。跨
.year
.month
分组可以避免这种情况。我不确定这是否是你需要的

df = pd.DataFrame(dict(dates=pd.date_range(start=pd.datetime(2017, 10, 1), periods=20, freq='3W')))
Out[]:
        dates
0  2017-10-01
1  2017-10-22
2  2017-11-12
3  2017-12-03
4  2017-12-24
5  2018-01-14
6  2018-02-04
7  2018-02-25
8  2018-03-18
9  2018-04-08
10 2018-04-29
11 2018-05-20
12 2018-06-10
13 2018-07-01
14 2018-07-22
15 2018-08-12
16 2018-09-02
17 2018-09-23
18 2018-10-14
19 2018-11-04


df.groupby([df.dates.dt.year, df.dates.dt.month]).max()
Out[]:
                 dates
dates dates           
2017  10    2017-10-22
      11    2017-11-12
      12    2017-12-24
2018  1     2018-01-14
      2     2018-02-25
      3     2018-03-18
      4     2018-04-29
      5     2018-05-20
      6     2018-06-10
      7     2018-07-22
      8     2018-08-12
      9     2018-09-23
      10    2018-10-14
      11    2018-11-04

df.groupby([df.dates.dt.year, df.dates.dt.month]).max().values
Out[]:
array([['2017-10-22T00:00:00.000000000'],
       ['2017-11-12T00:00:00.000000000'],
       ['2017-12-24T00:00:00.000000000'],
       ['2018-01-14T00:00:00.000000000'],
       ['2018-02-25T00:00:00.000000000'],
       ['2018-03-18T00:00:00.000000000'],
       ['2018-04-29T00:00:00.000000000'],
       ['2018-05-20T00:00:00.000000000'],
       ['2018-06-10T00:00:00.000000000'],
       ['2018-07-22T00:00:00.000000000'],
       ['2018-08-12T00:00:00.000000000'],
       ['2018-09-23T00:00:00.000000000'],
       ['2018-10-14T00:00:00.000000000'],
       ['2018-11-04T00:00:00.000000000']], dtype='datetime64[ns]')

dates.groupby([data.index.month]).tail(1)
可能有帮助您使用的熊猫版本是什么?@Dark和@TD-asker解决方案在我使用数据帧时对我不起作用,但它确实
df.groupby(df.dates.dt.month).tail(1)
@Dillon所有的问题都是它是否对OP有效:)您好,我使用的是Phyton 3…如果您要用其他人的解决方案更新您的答案,至少要归功于他们…@TD Asker道歉如果出现这种情况,我没有刷新。这是我自己的解决方案,但由于时间顺序,可以看出我复制了答案。我添加了一个编辑来解释原因。(请参阅编辑历史以了解我发布并删除的原因)嗯。。。不,我得到了错误,那个序列没有属性月份。我在寻找箱线图的索引,所以我可以从1到x,从x到y,依此类推。每个月有一个方框图。@S.Kociok您使用的是
.month
还是
.dt.month
我使用的是
.month
,但即使使用
.dt.month
它也不会运行。我想要列表的最后一个日期,而不是新创建的日期。。。因此,如果我得到例如:2017-01-31 04:00:00和2017-02-01 00:00:00,程序应该给我2017-01-31 04:00:00的索引,例如x=189。