如何使用python逐行读取特定值的特定时间

数据挖掘 Python 时间序列
2022-03-15 17:43:39

在这里,我有一个包含日期、时间和一个输入列的数据集。此输入列包含值 3 和 4。在这里,我想逐行读取具有 4 行的日期时间值。应跳过具有 3 个值 time 的其他行。我写了代码,但它不能正常工作。

data['date_time']= pd.to_datetime(data['date'] + " " + data['time'],
                    format='%d/%m/%Y %H:%M:%S', dayfirst=True)

x = data['X'].astype(int)
time = []
while x.all()==4:
   time=data['date_time']
   break
   time+=1
print(time)  

我期望的输出:

date          time   X            expected output
10/3/2018   6:15:00     3            skip row
10/3/2018   6:45:00     3            skip row
10/3/2018   7:45:00     3            skip row       
10/3/2018   9:00:00     4           read time 09:00:00
10/3/2018   9:25:00     3            skip row
10/3/2018   9:30:00     3            skip row
10/3/2018   11:00:00    4           read time 11:00:00      
10/3/2018   11:30:00    3            skip row 
10/3/2018   13:30:00    3            skip row
10/3/2018   13:50:00    3            skip row
10/3/2018   15:00:00    4           read time 15:00:00    

我的csv的subest:

date           time   X
10/3/2018   6:15:00     3
10/3/2018   6:45:00     3
10/3/2018   7:45:00     3
10/3/2018   9:00:00     4
10/3/2018   9:25:00     3
10/3/2018   9:30:00     3
10/3/2018   11:00:00    4
10/3/2018   11:30:00    3
10/3/2018   13:30:00    3
10/3/2018   13:50:00    3
10/3/2018   15:00:00    4
10/3/2018   15:25:00    3
10/3/2018   16:25:00    3
10/3/2018   18:00:00    3
10/3/2018   19:00:00    3
10/3/2018   19:30:00    3
10/3/2018   20:00:00    4
10/3/2018   22:05:00    3
10/3/2018   22:15:00    3
10/3/2018   23:40:00    3
10/4/2018   6:58:00     3
10/4/2018   13:00:00    3
10/4/2018   16:00:00    4
10/4/2018   17:00:00    3
10/4/2018   18:00:00    3

我的 csv : CSV 文件

3个回答

单线:

result = data.loc[data.x == 4, "time"]    # assuming you expect just the time as output

解释

为了描述你的问题,首先用英文(然后是代码):

您想要数据框的行,其中X列的值为 4,并且所有列都应包含在结果中。

要检查线圈X在 4 的位置,我们可以这样做:

data.X == 4

这将为每一行返回True或。False现在我们可以将其用作过滤器,将其传递给 pandas DataFrame 的.loc访问器(loc=“locate”)。

result = data.loc[data.X == 4, :]
# Notation: dataframe[rows_we_want, columns_we_want]

因为我们想要所有列,所以我们在逗号后面留下了冒号 :Pandas 假设您默认需要所有列,因此我们实际上可以将其省略以获取上面给出的单行

因此,如果您只想将时间作为输出给出,您可以通过将列名放在逗号后面来过滤:

result = data.loc[data.X == 4, "time"]

您可以使用数据框 data = data[data['X'] == 4] 的条件

尝试数据框分配。它创建一个新列,其中 X==4 过滤应用时间

  dataDict={'date': {0: '10/3/2018', 1: '10/3/2018', 2: '10/3/2018', 3: '10/3/2018', 4: '10/3/2018', 5: '10/3/2018', 6: '10/3/2018', 7: '10/3/2018', 8: '10/3/2018', 9: '10/3/2018', 10: '10/3/2018', 11: '10/3/2018', 12: '10/3/2018', 13: '10/3/2018', 14: '10/3/2018', 15: '10/3/2018', 16: '10/3/2018', 17: '10/3/2018', 18: '10/3/2018', 19: '10/3/2018', 20: '10/4/2018', 21: '10/4/2018', 22: '10/4/2018', 23: '10/4/2018', 24: '10/4/2018'}, 'time': {0: '6:15:00', 1: '6:45:00', 2: '7:45:00', 3: '9:00:00', 4: '9:25:00', 5: '9:30:00', 6: '11:00:00', 7: '11:30:00', 8: '13:30:00', 9: '13:50:00', 10: '15:00:00', 11: '15:25:00', 12: '16:25:00', 13: '18:00:00', 14: '19:00:00', 15: '19:30:00', 16: '20:00:00', 17: '22:05:00', 18: '22:15:00', 19: '23:40:00', 20: '6:58:00', 21: '13:00:00', 22: '16:00:00', 23: '17:00:00', 24: '18:00:00'}, 'X': {0: 3, 1: 3, 2: 3, 3: 4, 4: 3, 5: 3, 6: 4, 7: 3, 8: 3, 9: 3, 10: 4, 11: 3, 12: 3, 13: 3, 14: 3, 15: 3, 16: 4, 17: 3, 18: 3, 19: 3, 20: 3, 21: 3, 22: 4, 23: 3, 24: 3}}

df=pd.DataFrame(dataDict)
df['X']=df['X'].astype(int)
df=df.assign(find_4=lambda x: x[x['X']==4]['time']).fillna('')
print(df)

output:
    date      time  X    find_4
0   10/3/2018   6:15:00  3          
1   10/3/2018   6:45:00  3          
2   10/3/2018   7:45:00  3          
3   10/3/2018   9:00:00  4   9:00:00
4   10/3/2018   9:25:00  3          
5   10/3/2018   9:30:00  3          
6   10/3/2018  11:00:00  4  11:00:00
7   10/3/2018  11:30:00  3          
8   10/3/2018  13:30:00  3          
9   10/3/2018  13:50:00  3          
10  10/3/2018  15:00:00  4  15:00:00
11  10/3/2018  15:25:00  3          
12  10/3/2018  16:25:00  3          
13  10/3/2018  18:00:00  3          
14  10/3/2018  19:00:00  3          
15  10/3/2018  19:30:00  3          
16  10/3/2018  20:00:00  4  20:00:00
17  10/3/2018  22:05:00  3          
18  10/3/2018  22:15:00  3          
19  10/3/2018  23:40:00  3          
20  10/4/2018   6:58:00  3          
21  10/4/2018  13:00:00  3          
22  10/4/2018  16:00:00  4  16:00:00
23  10/4/2018  17:00:00  3          
24  10/4/2018  18:00:00  3