Pandas重新采样的日期时间跨越2天,一周从周日开始

2024-04-26 13:57:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的函数,读取一个csv文件,并将数据分为几天、几周和几个月。在

我的问题是,每天都是24小时从正常的12小时上午。但是,数据应该从下午4点到下午4点(进入第二天)进行分块。在

此外星期一使数据从星期一开始的星期一开始。我想默认为星期天下午4点到星期五下午4点。我可以通过索引天真地做这个,我想知道是否有一个更优雅的解决方案。在

目标:我想列出一个数据帧的列表,这些数据帧将分块这5分钟的数据(请参见测向头())以天、周、月为单位。几天来,我需要一天从下午4点开始,一直持续到第二天下午4点。几周来,我希望这一周从周日开始,但问题是,由于数据从周一开始,它希望将周与周一分开。在

def read_in_files(file_names):
    """
    1. Read the csv files to memory into a pandas dataframe with pd.read_csv
    2. separate the df into year, month, and date objects
    3. It also chunks the data by single day
    """
    import os
    import pandas as pd

    file1 = pd.read_csv(file_names, parse_dates=[['Date', 'Time']])

    df = pd.DataFrame(file1)

# Week is defined as sunday 4pm to Friday 4pm --not working correctly
# this is a timestamp obj
    df['year'], df['month'] = df['Date_Time'].dt.year, df['Date_time'].dt.month
    df['date'] = df['Date_Time'].dt.day
    df['week'] = df['Date_Time'].dt.week

    """
    these three lines below chunk the data by dates
    """
    df_single_day = []
    for group in df.groupby(df.Date_Time, sort=False):
        df_single_day.append(group[1])

    df_single_week = []
    for group in df.groupby(['week', 'year'], sort=False):
        df_single_week.append(group[1])

    df_single_month = []
        for group in df.groupby(['month', 'year'], sort=False):
        df_single_month.append(group[1])

    return df df_single_day, df_single_week, df_single_month

示例输出

单日[0].tail(5)

出局[11]:

^{pr2}$

单日[1].头(5)

出局[14]:

    Unnamed: 0  Symbol     Date_Time     Open    High     Low   Close  \
95          96  ABCDEF 2008-05-07 00:00  0.9478  0.9483  0.9475  0.9481   
96          97  ABCDEF 2008-05-07 00:05  0.9481  0.9484  0.9479  0.9484   
97          98  ABCDEF 2008-05-07 00:10  0.9482  0.9485  0.9480  0.9482   
98          99  ABCDEF 2008-05-07 00:15  0.9482  0.9485  0.9478  0.9483   
99         100  ABCDEF 2008-05-07 00:20  0.9483  0.9485  0.9480  0.9484   
    year  month  date  week  
95  2008      5     7    19  
96  2008      5     7    19  
97  2008      5     7    19  
98  2008      5     7    19  
99  2008      5     7    19  

函数从00:00开始为每个列表分块数据,我希望它从一天的16:00开始到第二天的15:55


Tags: csvthe数据indfdatetimegroup
1条回答
网友
1楼 · 发布于 2024-04-26 13:57:24
df['temp'] = df['Date'].astype(str) + ' ' + df['Time']
df.temp = pd.to_datetime(df.temp, infer_datetime_format=True)
df.temp = df.temp + pd.offsets.Hour(8)

g = df.groupby(df['temp'].dt.normalize())
df_single_day = []
for group in g:
    if len(group[1])> 1:
        df_single_day.append(group[1])

上面的代码产生正确的答案。我有一个小问题(但不重要)在周末16:00的组是单独的,所以我用if语句删除它们。在

还在想怎么做星期一如果我的数据是从周一开始的星期一周一到周一。。。在

相关问题 更多 >