从python中的两个时间戳之间选择数据

时间:2017-01-30 09:42:07

标签: python-3.x pandas datetime dataframe timestamp

我的查询正在重新获取数据,给出python中的两个时间戳。

我需要一个输入字段,我可以输入两个时间戳,然后从CSV读取,我需要检索该特定输入。

Actaul数据(CSV)

      Daily_KWH_System  PowerScout  Temperature         Timestamp  Visibility    Daily_electric_cost   kW_System 
 0         4136.900384  P371602077           0  07/09/2016 23:58          0    180.657705            162.224216 
 1         3061.657187  P371602077          66  08/09/2016 23:59         10    133.693074            174.193804 
 2         4099.614033  P371602077          63  09/09/2016 05:58         10    179.029562            162.774013  
3          3922.490275  P371602077          63  10/09/2016 11:58         10    171.297701            169.230047  
4          3957.128982  P371602077          88  11/09/2016 17:58         10    172.806125            164.099307 

示例:

Input:
start date : 2-1-2017
end date :10-1-2017

输出

Timestamp     Value
2-1-2017      10
3-1-2017      35
.
.
.
.
10-1-2017     25

原始CSV将包含所有数据

Timestamp        Value
1-12-2016        10
2-12-2016        25
.
.
.
1-1-2017         15
2-1-2017         10
.
.
.
10-1-2017        25
.
.
31-1-2017        50

2 个答案:

答案 0 :(得分:2)

使用pd.read_csv来读取文件

df = pd.read_csv('my.csv', index_col='Timestamp', parse_dates=[0])

然后使用您的输入切片

df[start_date:end_date]

答案 1 :(得分:1)

如果dayfirst=True中的所有开始和结束日期都在[],那么read_csv中的df.index似乎需要import pandas as pd from pandas.compat import StringIO temp=u"""Timestamp;Value 1-12-2016;10 2-12-2016;25 1-1-2017;15 2-1-2017;10 10-1-2017;25 31-1-2017;50""" #after testing replace 'StringIO(temp)' to 'filename.csv' #if necessary add sep #index_col=[0] convert first column to index #parse_dates=[0] parse first column to datetime df = pd.read_csv(StringIO(temp), sep=";", index_col=[0], parse_dates=[0], dayfirst=True) print (df) Value Timestamp 2016-12-01 10 2016-12-02 25 2017-01-01 15 2017-01-02 10 2017-01-10 25 2017-01-31 50 print (df.index.dtype) datetime64[ns] print (df.index) DatetimeIndex(['2016-12-01', '2016-12-02', '2017-01-01', '2017-01-02', '2017-01-10', '2017-01-31'], dtype='datetime64[ns]', name='Timestamp', freq=None) 选择:

start_date = pd.to_datetime('2-1-2017', dayfirst=True)
end_date  = pd.to_datetime('10-1-2017', dayfirst=True)
print (df[start_date:end_date])
            Value
Timestamp        
2017-01-02     10
2017-01-10     25
start_date = pd.to_datetime('3-1-2017', dayfirst=True)
end_date  = pd.to_datetime('10-1-2017', dayfirst=True)

print (df[(df.index > start_date) & (df.index > end_date)])
            Value
Timestamp        
2017-01-31     50

如果某些日期不在索引中,则需要boolean indexing

<input type="checkbox" name="values[{$optionName}]" value="1" data-to-enable="values[optionName1],values[optionName5],values[optionName50],values[optionName100],values[optionName333]" />