Pandas编辑传感器DataFrame及导出Excel的三类技术问题咨询
传感器CSV数据处理解决方案
问题1:删除Time A[s]=0对应的前3列数据,保留后续列所有数据
你的原代码错误在于使用pd.concat(..., join="inner"),这会连带删除后续列中对应前3列过滤掉的行,不符合“保留第4列及以后所有数据”的要求。正确逻辑是:仅清空前3列中Time A[s]=0的行数据,后续列完整保留。
修正代码:
import pandas as pd # 读取原始数据 alldata = pd.read_csv(r"C:\Users\max\Desktop\Input data.csv") time_a_col = ' Time sensor A[s]' # 复制原表避免修改原始数据 result = alldata.copy() # 定位Time A[s]=0的行,将对应前3列设为空白(NaN) mask = result[time_a_col] == 0 result.loc[mask, result.columns[:3]] = pd.NA # 若需求是直接移除前3列中符合条件的行(保留后续列全量),也可这么写: # df1_filtered = alldata.iloc[:, :3][alldata[time_a_col] != 0] # df2 = alldata.iloc[:, 3:] # result = pd.concat([df1_filtered, df2], axis=1)
问题2:数百列数据高效导出Excel
默认to_excel效率偏低,推荐以下优化方案:
方案1:使用xlsxwriter引擎
xlsxwriter对大数据量的写入速度优于默认引擎:
# 关闭索引可进一步提升速度(若不需要索引列) result.to_excel(r"C:\Users\max\Desktop\data2.xlsx", engine='xlsxwriter', index=False)
方案2:先导出CSV再转Excel
CSV写入速度远快于Excel,若无需复杂格式,可先存为CSV再用Excel转存:
result.to_csv(r"C:\Users\max\Desktop\data2.csv", index=False)
方案3:openpyxl写入模式
若需要保留格式,用openpyxl的write_only模式减少内存占用:
from openpyxl import Workbook wb = Workbook(write_only=True) ws = wb.create_sheet() # 写入表头 ws.append(result.columns.tolist()) # 逐行写入数据 for row in result.itertuples(index=False): ws.append(list(row)) wb.save(r"C:\Users\max\Desktop\data2.xlsx")
问题3:相同时间数据合并到同一行
根据数据结构分两种场景处理:
场景1:存在重复时间行,合并同时间的多行数据
按时间列分组,根据列类型选择聚合方式(非数值列取首个值,数值列取均值/求和等):
# 假设统一时间列名为'Time' merged_data = result.groupby('Time').agg({ 'Sensor A Value 1': 'first', # 非数值列保留第一个有效值 'Sensor A Value 2': 'mean', # 数值列取平均值 'Sensor B Value 1': 'sum', # 数值列求和 # 其他列按需设置聚合规则 }).reset_index()
场景2:Sensor A与Sensor B按时间匹配合并
若两类传感器各有时间列,需按时间对齐合并:
# 拆分两类传感器数据 sensor_a = result.iloc[:, :3].dropna(subset=[time_a_col]) sensor_b = result.iloc[:, 3:] time_b_col = 'Time sensor B[s]' # 假设Sensor B的时间列名 # 按时间列合并(how参数可选'outer'/'inner'/'left',按需选择) merged_data = pd.merge(sensor_a, sensor_b, left_on=time_a_col, right_on=time_b_col, how='outer')
内容的提问来源于stack exchange,提问作者AP85'
相关产品推荐
相关产品推荐

