从数据集的给定日期范围中提取属于一天的数据
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
我的目标是select将每一天对应的数据行导出到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日开始的那一天(January 12)
- 一月是正月(01),八月是八月(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)
只适用于一月的第一个月,我想是这样......
最后,由于我做错了什么,我得到了 203 个空的 CSV 文件...
我该如何应对这个适合方式的小挑战?
高度赞赏任何方向
是这样的吗?我将您原来的 Date:
专栏重命名为 Timestamp
。我还假设您拥有的 Date:
系列是 pandas 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-string
否则,使用这个
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
我有一个日期范围为 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
我的目标是select将每一天对应的数据行导出到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日开始的那一天(January 12)
- 一月是正月(01),八月是八月(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)
只适用于一月的第一个月,我想是这样......
最后,由于我做错了什么,我得到了 203 个空的 CSV 文件...
我该如何应对这个适合方式的小挑战? 高度赞赏任何方向
是这样的吗?我将您原来的 Date:
专栏重命名为 Timestamp
。我还假设您拥有的 Date:
系列是 pandas 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-string
否则,使用这个
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