【问题标题】:Filter dataset for current month only仅过滤当前月份的数据集
【发布时间】:2020-09-17 11:57:43
【问题描述】:

我有一个dataset,其中有一列包含日期(例如 09/17/20)作为对象。我想filter我所有的行基于当前月份。

import pandas as pd
import datetime as  dt
from datetime import datetime    
df =  pd.read_csv("dataset.csv", dtype="unicode") 
now = datetime.now()
df['month_start'] = pd.to_datetime(df['month_start'], format = "%Y-%d-%m")
mask = df['month_start'].dt.strftime("%Y-%m") == datetime.today().strftime("%Y-%m")
include = df[mask]
df.to_csv("dates.csv")
print(datetime.today().strftime("%Y-%m"))

我的尝试根本不filter 日期,因为我只想要当前月份的行。

【问题讨论】:

    标签: python python-3.x pandas datetime


    【解决方案1】:

    请检查sn-p。

    我从dataframe 获取所有月份并将其存储在一个列表中并获取所有年份并存储在另一个列表中,然后我将其与当前月份和当前年份进行比较,然后我从两个列表中访问公共值,最后使用索引值我使用iloc 来定位给定的行

    import pandas as pd
    from datetime import datetime
    df =  pd.read_csv("data.csv", dtype="unicode") 
    amon = pd.DatetimeIndex(df['month_start']).month.tolist()
    ayear= pd.DatetimeIndex(df['month_start']).year.tolist()
    bmon=[i for i,x in enumerate(amon) if((x==datetime.now().month))]
    byear=[i for i,x in enumerate(ayear) if((x==datetime.now().year))]
    common = [i for i in bmon if i in byear]
    df=df.iloc[common]
    
    Input
       month_start
    0   08/17/2015
    1   09/17/2015
    2   09/17/2020
    3   07/17/2020
    4   06/17/2020
    
    Output
      month_start
    2    09/17/2020
    

    【讨论】:

    • 对不起,我忘了说我有 2015 年的数据。你的 sn-p 只过滤月份而不是年份
    • 您想要基于当前月份和年份的数据吗? @阿伦。请编辑您的问题,使其更易于理解
    • 是的,仅限当月
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2021-12-06
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多