使用pandas追加一条记录



我在24小时内从我的太阳能逆变器上传了5分钟的数据,这应该相当于288条记录。有时数据集不包含288条记录,通常是285到287条记录。它似乎几乎每天都会错过一些东西。我有代码,使用5分钟的数据来创建每日记录,但他们是不准确的,如果不是所有的5分钟的数据都在那里。我一直在每天手工检查,并通过简单地复制以前的记录手动添加缺失的记录,如果一个不存在。我知道这并不完美,但最好是没有记录和少报。

数据集在每条记录的值之间使用逗号(,),记录之间使用分号(;)。即3条记录

20211002多27294,3.446,1080年,1080年,0.136,15380年,600年,南,244.4,0.000,0.000,0.000,1080.000,0.000,100.000;20211002,下午15:30,27204,3.435,1830年,1836年,0.232,15330年,660年,南,246.0,0.000,0.000,0.000,1830.000,0.000,100.000;20211002,十五25,27051,3.416,4820年,4824年为0.609,15275年,1580年,南,249.2,0.000,0.000,0.000,4820.000,0.000,100.000

然后转换为数组使用分割函数

with open(r'C:UsersdavidGrowattAPI5minutecheck.csv') as f:
array = [l.split(",") for l in f.readline().split(";") if l]

,

[["20211002","多","27294","3.446","1080","1080","0.136","15380","600","南","244.4","0.000","0.000","0.000","1080.000","0.000","100.000"),(' 20211002 ','下午15:30 ',' 27204 ',' 3.435 ',' 1830 ',' 1836 ',' 0.232 ',' 15330 ',' 660 ',"南","246.0","0.000","0.000","0.000","1830.000","0.000","100.000"),("20211002"、"十五25","27051","3.416","4820","4824","0.609","15275","1580","南","249.2","0.000","0.000","0.000","4820.000","0.000","100.000"]]

然后使用

df = pd.DataFrame(array, columns=['DATE', 'TIME', 'ENERGY_OUT', 'AAA', 'POWER_OUT', 'BBB', 'CCC', 'ENERGY_IN', 'POWER_IN', 'TEMPERATURE', 'VOLTAGE', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12'])

计算每日数字

我要做的是检查有288条记录通过比较时间戳相距5分钟。我可以使用

阵列[0][1]数组[1][1]...数组中[n] [1]

,但我不能检查然后使用df追加。所有我想做的是,如果5分钟的数据不存在,然后只是复制以前的记录,并将其添加到数组。

感谢您的帮助。

大卫

我模拟了15:35时缺少一个阅读的情况。

columns = ['DATE', 'TIME', 'ENERGY_OUT', 'AAA', 'POWER_OUT', 'BBB', 'CCC', 'ENERGY_IN',
'POWER_IN', 'TEMPERATURE', 'VOLTAGE', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12']
array = [
['20211002', '15:40', '27294', '3.446', '1080', '1080', '0.136', '15380', '600',
'NaN', '244.4', '0.000', '0.000', '0.000', '1080.000', '0.000', '100.000'],
['20211002', '15:30', '27204', '3.435', '1830', '1836', '0.232', '15330', '660',
'NaN', '246.0', '0.000', '0.000', '0.000', '1830.000', '0.000', '100.000'],
['20211002', '15:25', '27051', '3.416', '4820', '4824', '0.609', '15275', '1580',
'NaN', '249.2', '0.000', '0.000', '0.000', '4820.000', '0.000', '100.000']
]

通过前向填充每5分钟重新采样一次(使用之前的值),您可以填充空白。

df = pd.DataFrame(array, columns=columns)
df['DATETIME'] = pd.to_datetime(df['DATE']+' '+df['TIME'])
df = df.sort_values('DATETIME').set_index('DATETIME')
df_ffill = df.resample('5Min').ffill()

结果:

DATE   TIME ENERGY_OUT    AAA POWER_OUT   BBB  ...     v7     v8     v9       v10    v11      v12
DATETIME                                                                ...                                               
2021-10-02 15:25:00  20211002  15:25      27051  3.416      4820  4824  ...  0.000  0.000  0.000  4820.000  0.000  100.000
2021-10-02 15:30:00  20211002  15:30      27204  3.435      1830  1836  ...  0.000  0.000  0.000  1830.000  0.000  100.000
2021-10-02 15:35:00  20211002  15:30      27204  3.435      1830  1836  ...  0.000  0.000  0.000  1830.000  0.000  100.000
2021-10-02 15:40:00  20211002  15:40      27294  3.446      1080  1080  ...  0.000  0.000  0.000  1080.000  0.000  100.000
[4 rows x 17 columns]

DATE和TIME列的值仍然来自原始数据,但是DATETIME 1通过重新采样步骤更新。

最新更新