Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按日期筛选CSV_Python_Python 3.x_Csv_Pandas - Fatal编程技术网

Python 按日期筛选CSV

Python 按日期筛选CSV,python,python-3.x,csv,pandas,Python,Python 3.x,Csv,Pandas,熊猫按日期过滤 如何过滤带有日期的CSV 示例CSV User Dates Hours shift User1 01.01.2012 5 aaa User1 02.01.2012 5 aaa User1 03.01.2012 2 bbb User1 04.01.2012 3 aaa ..... User1 12.03.2012 1 aaa User1 13.03.2012

熊猫按日期过滤 如何过滤带有日期的CSV

示例CSV

User    Dates       Hours   shift
User1   01.01.2012      5   aaa 
User1   02.01.2012      5   aaa
User1   03.01.2012      2   bbb
User1   04.01.2012      3   aaa
.....
User1   12.03.2012      1   aaa
User1   13.03.2012      8   ccc
.....
User2   04.02.2012      4   aaa
User2   05.02.2012      3   bbb
结束等等

我可以使用

use = users.loc["User1"]
use['Date'] = pd.to_datetime(use['Date'], infer_datetime_format=True, exact=True)
mask = (use['Datum'] > Start) & (use['Date'] <= End)
print(use.loc[mask])
我还可以计算所有的小时数

print(use["Hours"].sum()
我可以数他的班次

counts = use.loc[ou['Shift'] == 'aaa', 'Hours'].value_counts()
但我不知道如何根据日期和上面的陈述进行筛选。 比如,用户2统计3月份的所有班次,或者用户1统计2月份的所有工时

或多或少,我设法按日期和用户使用

use = users.loc["User1"]
use['Date'] = pd.to_datetime(use['Date'], infer_datetime_format=True, exact=True)
mask = (use['Datum'] > Start) & (use['Date'] <= End)
print(use.loc[mask])
更新: 我取得了一些进展

print(use[use['Date'] > '02.01.2012'],['hours'].sum()))
很好,但不是我想要的。与:

print(use[use['Date'] > '02.01.2012'] & (use[use['Date'] < '02.05.2012'],['hours'].sum()))
我认为你可以使用:

Start = '2012-01-01'
End = '2012-03-03'
use['Dates'] = pd.to_datetime(use['Dates'], dayfirst=True)
mask = (use['Dates'] > Start) & (use['Dates'] <= End) & (use['shift'] == 'aaa')
use1 = use.loc[mask]
print (use1)
    User      Dates  Hours shift
1  User1 2012-01-02      5   aaa
3  User1 2012-01-04      3   aaa
6  User2 2012-02-04      4   aaa

use1 = use.query('Dates > @Start and Dates <= @End and shift == "aaa"')
print (use1)
    User      Dates  Hours shift
1  User1 2012-01-02      5   aaa
3  User1 2012-01-04      3   aaa
6  User2 2012-02-04      4   aaa

print (mask.sum())
3

编辑:

总而言之:

use = pd.DataFrame({'Date': ['01.01.2012', '02.01.2012', '03.01.2012', '04.01.2012', '12.03.2012', '13.03.2012', '04.02.2012', '05.02.2012'], 'User': ['User1', 'User1', 'User1', 'User1', 'User1', 'User1', 'User2', 'User2'], 'hours': [5, 5, 2, 3, 1, 8, 4, 3], 'shift': ['aaa', 'aaa', 'bbb', 'aaa', 'aaa', 'ccc', 'aaa', 'bbb']})
print (use)

    User        Date  hours shift
0  User1  01.01.2012      5   aaa
1  User1  02.01.2012      5   aaa
2  User1  03.01.2012      2   bbb
3  User1  04.01.2012      3   aaa
4  User1  12.03.2012      1   aaa
5  User1  13.03.2012      8   ccc
6  User2  04.02.2012      4   aaa
7  User2  05.02.2012      3   bbb

Start='2012-01-01'
完=‘2012-01-30’
用户='User1'
移位='aaa'
使用['Date']=pd.to_datetime(使用['Date'],dayfirst=True)
#按日期计算的小时数(总和)
打印(使用.loc[(使用['Date']>Start)和(使用['Date']开始)和(使用['Date']<结束)和
(使用['User']==User),'hours'].sum()
10
#按日期和用户列出的小时数(计数)
打印((使用['Date']>开始)和(使用['Date']<结束)和
(使用['User']==User)).sum()
3.
#按日期、用户和班次计算的小时数(计数)
打印((使用['Date']>开始)和(使用['Date']<结束)和
(使用['User']==User)和(使用['shift']==shift)).sum()
2.

在运行聚合之前,您需要缩小数据集的范围

use[use['Dates'] == '01.01.2012']['hours'].sum()
该行的第一部分是筛选:

use[use['Dates'] == '01.01.2012']

我如何在这些范围内计算,例如所有班次?掩码=(使用['Date']>Start)和(使用['Date']我更新答案,你能检查一下吗?你想要的输出是什么?我想你可以先按日期过滤,然后输出聚合-。这是你想要的吗?很高兴可以帮助你,祝你好运!熊猫真的是一个很好的库。没问题,我们每个人都开始了。但以后会越来越好。祝你好运!但我需要一个日期范围,例如从2012年1月1日开始至2012年1月6日相同钻孔。
使用[使用['Dates']>='2012年1月1日][使用['Dates']不工作值错误:无法从重复轴重新编制索引
use = pd.DataFrame({'Date': ['01.01.2012', '02.01.2012', '03.01.2012', '04.01.2012', '12.03.2012', '13.03.2012', '04.02.2012', '05.02.2012'], 'User': ['User1', 'User1', 'User1', 'User1', 'User1', 'User1', 'User2', 'User2'], 'hours': [5, 5, 2, 3, 1, 8, 4, 3], 'shift': ['aaa', 'aaa', 'bbb', 'aaa', 'aaa', 'ccc', 'aaa', 'bbb']})
print (use)

    User        Date  hours shift
0  User1  01.01.2012      5   aaa
1  User1  02.01.2012      5   aaa
2  User1  03.01.2012      2   bbb
3  User1  04.01.2012      3   aaa
4  User1  12.03.2012      1   aaa
5  User1  13.03.2012      8   ccc
6  User2  04.02.2012      4   aaa
7  User2  05.02.2012      3   bbb
Start = '2012-01-01'
End = '2012-01-30'
User = 'User1'
shift = 'aaa'

use['Date'] = pd.to_datetime(use['Date'], dayfirst=True)

#how many Hours by dates (sum)
print(use.loc[(use['Date'] > Start) & (use['Date'] < End),'hours'].sum())
10

#how many Hours by dates and user (sum)
print(use.loc[(use['Date'] > Start) & (use['Date'] < End) & 
              (use['User'] == User),'hours'].sum())
10

#how many Hours by dates and user (count)
print(((use['Date'] > Start) & (use['Date'] < End) & 
       (use['User'] == User)).sum())
3

#how many Hours by dates and user and shift (count)
print(((use['Date'] > Start) & (use['Date'] < End) & 
       (use['User'] == User ) & (use['shift'] == shift)).sum())
2
use[use['Dates'] == '01.01.2012']['hours'].sum()
use[use['Dates'] == '01.01.2012']