替换缺少的csv数据行

ua4mk5z4  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(105)

我有一个80,000行的csv文件,由四列ID、日期、时间和流量组成。如果流量数据丢失,则跳过丢失的数据,直到记录新的流量数据,然后继续记录数据。每15分钟进行一次流量测量。
示例:

USGS    2/12/2023   0:45    167
USGS    2/12/2023   1:00    170
USGS    2/12/2023   1:15    177
USGS    2/12/2023   1:45    170
USGS    2/12/2023   2:00    164
USGS    2/12/2023   2:15    177
USGS    2/12/2023   2:30    170
USGS    2/12/2023   2:45    180

此处2023年2月12日记录数据中缺少1:30。这些缺失数据可能是一次性的,也可能发生在多个小时或多天内。
我正在尝试编写一个python脚本,它会搜索丢失的时间步长,每当它找到跳过/丢失的行时,它会使用正确的ID、日期、时间和NA将替换行添加到丢失的位置。
示例

USGS    2/12/2023   0:45    167
USGS    2/12/2023   1:00    170
USGS    2/12/2023   1:15    177
USGS    2/12/2023       1:30    NA
USGS    2/12/2023   1:45    170
USGS    2/12/2023   2:00    164
USGS    2/12/2023   2:15    177
USGS    2/12/2023   2:30    170
USGS    2/12/2023   2:45    180

USGS    1/16/2023   23:00   329
USGS    1/16/2023   23:15   329
USGS    1/16/2023   23:30   329
USGS    1/16/2023   23:45   NA
USGS    1/17/2023   0:00    NA
USGS    1/17/2023   0:15    NA
USGS    1/17/2023   0:30    329
USGS    1/17/2023   0:45    329
USGS    1/17/2023   1:00    329
USGS    1/17/2023   1:15    329
USGS    1/17/2023   1:30    329

目前,我能够找到替换数据集中的单个值的解决方案,例如1:30的时间值或flow值nothing,它描述了整行缺失数据的替换。

lymnna71

lymnna711#

你可以用Pandas来做这个,而且应该很快。

import pandas as pd
df = pd.DataFrame({'ID': ['USGS', 'USGS', 'USGS', 'USGS', 'USGS', 'USGS', 'USGS', 'USGS'],
 'Date': ['2/12/2023',
  '2/12/2023',
  '2/12/2023',
  '2/12/2023',
  '2/12/2023',
  '2/12/2023',
  '2/12/2023',
  '2/12/2023'],
 'Time': ['0:45', '1:00', '1:15', '1:45', '2:00', '2:15', '2:30', '2:45'],
 'Flow': [167, 170, 177, 170, 164, 177, 170, 180]})

df['dt'] = pd.to_datetime(df['Date'] + ' ' + df['Time'])

df = df.set_index('dt').groupby('ID')['Flow'].resample('15T').mean().reset_index()

# Replace # with - if on linux system
df['Date'] = df['dt'].dt.strftime('%#m/%d/%Y')
df['Time'] = df['dt'].dt.strftime('%#H:%M')

df = df.drop(columns=['dt'])[['ID','Date','Time','Flow']]

print(df)

产出

ID       Date  Time   Flow
0  USGS  2/12/2023  0:45  167.0
1  USGS  2/12/2023  1:00  170.0
2  USGS  2/12/2023  1:15  177.0
3  USGS  2/12/2023  1:30    NaN
4  USGS  2/12/2023  1:45  170.0
5  USGS  2/12/2023  2:00  164.0
6  USGS  2/12/2023  2:15  177.0
7  USGS  2/12/2023  2:30  170.0
8  USGS  2/12/2023  2:45  180.0

相关问题