Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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返回时间数据在2个值之间的对应单元格_Python_Python 3.x_Pandas - Fatal编程技术网

Python返回时间数据在2个值之间的对应单元格

Python返回时间数据在2个值之间的对应单元格,python,python-3.x,pandas,Python,Python 3.x,Pandas,目前我正在编写一些软件来做数据分析。我的代码有点问题,现在一些数据被错误的时间值破坏了。我希望python找到时间值介于00:00:00和03:59:00之间的数据行,并从同一行返回相应的“Ticker”和“Exchange”值,但不幸的是,我在完成这项工作时遇到问题,希望这里的人能帮我解决 示例数据帧: Ticker Exchange Date Time 0 AAPL NASDAQ 20200501 01:00:00 1 AAPL NASDAQ

目前我正在编写一些软件来做数据分析。我的代码有点问题,现在一些数据被错误的时间值破坏了。我希望python找到时间值介于00:00:00和03:59:00之间的数据行,并从同一行返回相应的“Ticker”和“Exchange”值,但不幸的是,我在完成这项工作时遇到问题,希望这里的人能帮我解决

示例数据帧:

   Ticker Exchange      Date      Time
0    AAPL   NASDAQ  20200501  01:00:00
1    AAPL   NASDAQ  20200501  02:00:00
2    AAPL   NASDAQ  20200501  03:00:00
3    AAPL   NASDAQ  20200502  01:00:00
4    AAPL   NASDAQ  20200502  02:00:00
5    AAPL   NASDAQ  20200502  03:00:00
6    TSLA   NASDAQ  20200501  05:00:00
7    TSLA   NASDAQ  20200501  06:00:00
8    TSLA   NASDAQ  20200501  07:00:00
9    TSLA   NASDAQ  20200502  05:00:00
10   TSLA   NASDAQ  20200502  06:00:00
11   TSLA   NASDAQ  20200502  07:00:00
示例输出:

  Ticker Exchange
0   AAPL   NASDAQ
在这种情况下,“纳斯达克”交易所的“AAPL”股票的时间值介于00:00:00和03:59:00之间,因此python应该将股票代码和交易所返回给我

我希望我能说清楚,这里有人能帮我

复制粘贴的示例代码:

import pandas as pd

df1 = pd.DataFrame({'Ticker': ['AAPL', 'AAPL', 'AAPL', 'AAPL', 'AAPL', 'AAPL','TSLA', 'TSLA', 'TSLA', 'TSLA', 'TSLA', 'TSLA'],
                'Exchange': ['NASDAQ','NASDAQ','NASDAQ','NASDAQ','NASDAQ','NASDAQ','NASDAQ','NASDAQ','NASDAQ','NASDAQ','NASDAQ','NASDAQ'],
                'Date': [20200501, 20200501, 20200501, 20200502, 20200502, 20200502, 20200501, 20200501, 20200501, 20200502, 20200502, 20200502],
                'Time': ['01:00:00','02:00:00','03:00:00','01:00:00','02:00:00','03:00:00','05:00:00','06:00:00','07:00:00','05:00:00','06:00:00','07:00:00',]})
print(df1)

output = pd.DataFrame({'Ticker': ['AAPL'],
                'Exchange': ['NASDAQ']})

print(output)


#Code from MaKaNu that results in error: "TypeError: cannot astype a datetimelike from [datetime64[ns]] to [int32]"

minimal = pd.DataFrame({'time': [pd.to_datetime('00:00:00')]})
maximal = pd.DataFrame({'time': [pd.to_datetime('03:59:00')]})

#The lines below give the error
minimal = pd.to_datetime(minimal['time']).astype(int) / 10**9
maximal = pd.to_datetime(maximal['time']).astype(int) / 10**9

df_unix_sec = pd.to_datetime(df1['Time']).astype(int) / 10**9

series = df_unix_sec.between(minimal[0], maximal[0])
result = df1.loc[series == True][['Ticker', 'Exchange']].loc[0]
print(result)

要在两个条件之间进行比较,第一步是从字符串中创建数值。为了保持连续性,我创建了两个小数据帧,其中只有最小值和最大值

minimal=pd.DataFrame({'time':[pd.to_datetime('0:00:00')]))
maximal=pd.DataFrame({'time':[pd.to_datetime('3:59:00')]})
然后使用函数
pd.to_datetime
将其设置为整数,并将其除以10的幂9,以创建合理的值

minimal=pd.to_datetime(minimal['time'])。astype(int)/10**9
maximal=pd.to_datetime(maximal['time'])。aType(int)/10**9
下一步是对原始数据帧中的列
'Time'
执行相同的操作

df_unix_sec=pd.to_datetime(df1['Time'])。astype(int)/10**9
最后一步,我使用了内置函数
between
,并使用
minimal
maximal
中的第一个条目作为参数

print(df_unix_sec.between(最小[0],最大[0]))
我打印的结果是一个带有布尔值的熊猫系列:

0 True
1正确
2正确
3正确
4正确
5对
6错误
7错误
8错误
9错误
10错误
11错误
名称:时间,数据类型:布尔
正如您所见,条件之间的所有值均为真

现在我们只保存这个系列,并将它们用作原始数据帧的掩码

series=df_unix_sec.between(最小[0],最大[0])
打印(df1.loc[series==True])
结果如下所示:

股票交换日期时间
0 AAPL纳斯达克20200501 01:00:00
1 AAPL纳斯达克20200501 02:00:00
2 AAPL纳斯达克20200501 03:00:00
3 AAPL纳斯达克20200502 01:00:00
4 AAPL纳斯达克20200502 02:00:00
5 AAPL纳斯达克20200502 03:00:00
如果您只需要从您的问题中输出示例:

result=df1.loc[series==True][[Ticker',Exchange']].loc[0]
打印(结果)
结果:

Ticker-AAPL
纳斯达克交易所
名称:0,数据类型:对象

要在两个条件之间进行比较,第一步是从字符串中创建数值。为了保持连续性,我创建了两个小数据帧,其中只有最小值和最大值

minimal=pd.DataFrame({'time':[pd.to_datetime('0:00:00')]))
maximal=pd.DataFrame({'time':[pd.to_datetime('3:59:00')]})
然后使用函数
pd.to_datetime
将其设置为整数,并将其除以10的幂9,以创建合理的值

minimal=pd.to_datetime(minimal['time'])。astype(int)/10**9
maximal=pd.to_datetime(maximal['time'])。aType(int)/10**9
下一步是对原始数据帧中的列
'Time'
执行相同的操作

df_unix_sec=pd.to_datetime(df1['Time'])。astype(int)/10**9
最后一步,我使用了内置函数
between
,并使用
minimal
maximal
中的第一个条目作为参数

print(df_unix_sec.between(最小[0],最大[0]))
我打印的结果是一个带有布尔值的熊猫系列:

0 True
1正确
2正确
3正确
4正确
5对
6错误
7错误
8错误
9错误
10错误
11错误
名称:时间,数据类型:布尔
正如您所见,条件之间的所有值均为真

现在我们只保存这个系列,并将它们用作原始数据帧的掩码

series=df_unix_sec.between(最小[0],最大[0])
打印(df1.loc[series==True])
结果如下所示:

股票交换日期时间
0 AAPL纳斯达克20200501 01:00:00
1 AAPL纳斯达克20200501 02:00:00
2 AAPL纳斯达克20200501 03:00:00
3 AAPL纳斯达克20200502 01:00:00
4 AAPL纳斯达克20200502 02:00:00
5 AAPL纳斯达克20200502 03:00:00
如果您只需要从您的问题中输出示例:

result=df1.loc[series==True][[Ticker',Exchange']].loc[0]
打印(结果)
结果:

Ticker-AAPL
纳斯达克交易所
名称:0,数据类型:对象

时间必须在0:00:00到3:59:00之间,这是您的唯一条件吗?谢谢您@MaKaNu的回复。是的,我唯一的标准是行需要包含00:00:00到03:59:00之间的数据。不一定是每分钟一次,此时间段之间的1行数据已经损坏。您的唯一条件是时间必须介于0:00:00和3:59:00之间吗?感谢您的回复@MaKaNu。是的,我唯一的标准是行需要包含00:00:00到03:59:00之间的数据。这不一定是每分钟一次,这一时间段之间的一行数据已经损坏。感谢您的回答@MaKaNu。我知道这是怎么回事。不幸的是,我收到一个错误:“TypeError:无法在尝试将datetime转换为整数值的行中键入从[datetime64[ns]]到[int32]的datetimelike。”。我一直试图解决这个问题,但迄今为止没有成功。你能帮帮我吗?我工作很忙