基于Pandas自动化提取CSV中起飞事件对应TimeTag的需求
用Pandas批量识别起飞事件并提取时间标签
核心思路
针对每个CSV文件,我们需要:
- 过滤出仅包含
Altitude的DataItem数据行 - 校验并转换
ParsedData为数值类型(避免字符串干扰) - 识别前一行
ParsedData为0、当前行ParsedData为正数的触发行,提取对应的TimeTag
实现代码
import pandas as pd import glob def extract_takeoff_time(csv_path): # 读取CSV文件 df = pd.read_csv(csv_path) # 筛选Altitude数据 altitude_df = df[df['DataItem'] == 'Altitude'].copy() # 转换ParsedData为数值类型,处理可能的非数值值 altitude_df['ParsedData'] = pd.to_numeric(altitude_df['ParsedData'], errors='coerce') # 过滤掉无效数据(ParsedData为空的行) altitude_df = altitude_df.dropna(subset=['ParsedData']) # 识别起飞事件:当前行ParsedData>0,上一行ParsedData=0 altitude_df['prev_ParsedData'] = altitude_df['ParsedData'].shift(1) takeoff_events = altitude_df[(altitude_df['ParsedData'] > 0) & (altitude_df['prev_ParsedData'] == 0)] # 提取TimeTag,若有多个事件取第一个(起飞通常是第一次触发) if not takeoff_events.empty: return takeoff_events.iloc[0]['TimeTag'] else: return None # 无起飞事件返回空 # 批量处理所有CSV文件 csv_files = glob.glob('*.csv') # 替换为你的CSV文件路径匹配规则 takeoff_results = {} for file in csv_files: takeoff_time = extract_takeoff_time(file) takeoff_results[file] = takeoff_time # 输出结果(可保存为新CSV) result_df = pd.DataFrame.from_dict(takeoff_results, orient='index', columns=['TakeoffTimeTag']) result_df.to_csv('takeoff_summary.csv')
关键代码说明
glob.glob('*.csv'):匹配当前目录下所有CSV文件,可根据实际路径修改(比如'data/*.csv')shift(1):获取上一行的ParsedData值,用于判断状态变化errors='coerce':将无法转换为数值的ParsedData设为NaN,后续通过dropna过滤- 若存在多次0→正数的情况,代码默认取第一个事件(符合起飞场景),如需保留所有事件,去掉
iloc[0]即可
注意事项
- 确保
TimeTag列格式为可识别的时间字符串或数值,无需额外转换 - 若
ParsedData存在浮点型0(比如0.0),代码中的==0依然有效,无需修改 - 可根据实际需求调整筛选条件(比如允许微小正数值,将
>0改为>1e-6)
内容的提问来源于stack exchange,提问作者user23133775
相关产品推荐
相关产品推荐

