我重新提出了问题的重点,并尝试尽可能具体。在下面,我还包括到目前为止使用的代码;
((1)从SQL中提取数据时,我的时间是一种混合格式,其中包含一个很难使用的字母。为了避免出现问题,我尝试提出申请; df.time = pd.to_timedelta(df.time,unit ='ms'),这很好,因为它不知道如何提取小时和分钟。例子; 2019.11.22D01:18:00.01000,我只需要以以下格式输入``时间''列; '01:18:00.01000'。也许我可以使用'np.datetime64'将我所有的SQL时间条目转换为所需的格式,并截断我需要的字符数量?请告知团队。我也尝试过'data = np.datetime64('time'),但是得到'解析日期时间字符串“ time”在位置0'时出错。
((2)我尝试按以下两个因素对我的数据进行分组,首先是'data2',然后是'time'。这是因为我的数据不是按以下顺序而是按随机顺序排列。我得到:'DataFrameGroupBy'是不可调用的。那是因为我有重复的data2值吗?您能否帮忙解决此问题?
(3)因此,在将数据按'data2'和'time'分组之后,我需要在预定义的时间间隔(即[0 = 10ms],[10-20ms)等)内对数据进行分箱,因此例如,0,1,2将落在[0-10ms)分箱之下。因此,我需要能够首先定义这些垃圾箱(我将拥有一组固定的垃圾箱)。然后,对于下一个'data2'更改(即从55变为56),我们将开始时间设置为0,并根据从0到data2再次更改之前经过的时间对行数据进行分类。等等。我该如何编写代码,最麻烦的是将计时器设置为“ 0”,并在每行中引用“时间”,只要“ data2”的值没有改变。然后,当“ data2”更改时,重新开始,对数据进行相应的装箱。
下面是我到目前为止使用的代码;
import pyodbc
import pandas as pd
import numpy as np
conn = pyodbc.connect('Driver={SQL Server};'
'Server=XXXXXXXXX;'
'Database=Dynamics;'
'Trusted_Connection=yes;')
cursor = conn.cursor()
SQL_Query = pd.read_sql_query('''select ID,time,data1,data2,data3,data4,data5 from Dynamics''', conn)
df = pd.DataFrame(SQL_Query, columns=['ID','time','data2','data3','data4','data5'])
df.time=pd.to_timedelta(df.time, unit='ms')
df[['data4']] = df[['data4']].apply(pd.to_numeric)
df['diff']=df['data4']-df['data5']
df['diff']=df['diff'].abs()
df=df.groupby(['data3','time'])
print(df)
time data_1 data_2 data_3 data_4 data_5
0 2019-11-22 01:18:00.010 a 55 A 1.20 1.24
1 2019-11-22 01:18:00.090 a 55 B 1.25 1.24
2 2019-11-22 01:18:00.100 a 55 C 1.26 1.24
3 2019-11-22 01:18:00.140 a 55 A 1.22 1.22
4 2019-11-22 01:18:00.160 a 55 B 1.23 1.22
我重新提出了问题的重点,并尝试尽可能具体。在下面,我还包括到目前为止使用的代码; (1)从SQL中提取数据时,我的时间是一种混合格式,其中包含...
熊猫具有日期范围的强大功能。这是一个创建一分钟范围的示例,在每一行上都有一个新的毫秒(这也是索引)。