簡體   English   中英

從數據集上的給定日期范圍中提取屬於某一天的數據

[英]Extracting data belonging to a day from a given range of dates on a dataset

我的數據集的日期范圍是2018年1月12日到8月3日,其中包含一些值:

在此輸入圖像描述

my_df DataFrame的維度是:

my_df.shape 
(9752, 2)

每行包含半小時的頻率

第一行開始於2018-01-12

my_df.iloc[0]
Date:       2018-01-12 00:17:28
Value                      1
Name: 0, dtype: object

最后一排結束於2018-08-03

my_df.tail(1)
                  Date:     Value
9751    2018-08-03 23:44:59  1

我的目標是選擇與每天相對應的數據行並將其導出為CSV文件。

為了獲得1月12日的數據並保存到可讀文件,我執行:

# Selecting data value of each day
my_df_Jan12 = my_df[(my_df['Fecha:']>='2018-01-12 00:00:00') 
              & 
              (my_df['Fecha:']<='2018-01-12 23:59:59')
                                   ]
my_df_Jan12.to_csv('Data_Jan_12.csv', sep=',', header=True, index=False)

從1月12日到8月03日有203天(28周)

我不想每天手動執行此查詢,然后我嘗試以下基本分析:

  • 我需要生成203個文件(每天1個文件)
  • 1月12日(1月12日)的一天
  • 1月是第一個月(01),8月是第8個月(08)

然后:

  • 我需要迭代整天203天
    • 並且必須在每個日期行值中檢查月份和日期值日期以及檢查每個日期值的變化

根據以上所述,我正在嘗試這種方法:

# Selecting data value of each day (203 days)
for i in range(203):
    for j in range(1,9): # month
        for k in range(12,32): # days of the month
            values = my_df[(my_df['Fecha:']>='2018-0{}-{} 00:00:00'.format(j,k)) 
            &  
            (my_df['Fecha:']<='2018-0{}-{} 23:59:59'.format(j,k))]
            values.to_csv('Values_day_{}.csv'.format(i), sep=',', header=True, index=False)

但是我的問題在於我在幾個月range(12,32)迭代range(12,32) ,這個range(12,32)僅適用於1月份的第一個月,我想是這樣......

最后,我得到203個空的CSV文件,因為我做錯了...

如何才能解決這種適合的小挑戰? 任何方向都非常感謝

像這樣的東西? 我將您的原始列Date:重命名為Timestamp 我也假設您擁有的Date:系列是熊貓DateTime系列。

my_df.columns = ['Timestamp', 'Value']
my_df['Date'] = my_df['Timestamp'].apply(lambda x: x.date())
dates = my_df['Date'].unique()
for date in dates:
    f_name = str(date) + '.csv'
    my_df[my_df['Date'] == date].to_csv(f_name)

groupby

for date, d in df.groupby(pd.Grouper(key='Date', freq='D')):
  d.to_csv(f"Data_{date:%b_%d}.csv", index=False)

注意我使用的是一個Python字符串3.6+的f字符串
否則,請使用此功能

for date, d in df.groupby(pd.Grouper(key='Date', freq='D')):
  d.to_csv("Data_{:%b_%d}.csv".format(date), index=False)

考慮一下df

df = pd.DataFrame(dict(
    Date=pd.date_range('2010-01-01', periods=10, freq='12H'),
    Value=range(10)
))

然后

for date, d in df.groupby(pd.Grouper(key='Date', freq='D')):
  d.to_csv(f"Data_{date:%b_%d}.csv", index=False)

並驗證

from pathlib import Path

print(*map(Path.read_text, Path('.').glob('Data*.csv')), sep='\n')

Date,Value
2010-01-05 00:00:00,8
2010-01-05 12:00:00,9

Date,Value
2010-01-04 00:00:00,6
2010-01-04 12:00:00,7

Date,Value
2010-01-02 00:00:00,2
2010-01-02 12:00:00,3

Date,Value
2010-01-01 00:00:00,0
2010-01-01 12:00:00,1

Date,Value
2010-01-03 00:00:00,4
2010-01-03 12:00:00,5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM