使用python,先设置一个终止时间戳;遍历一个pd格式的数据,其中如果每一行的列名为ACC_TIME的时间戳的int是不为0,那么将其和终止时间戳比对;反之则用每一行的列名为PPG_TIME的时间戳;如果终止时间戳小于此时间戳,那么终止,并将之前的行加入到CSV的文件当中
时间: 2025-05-19 12:19:00 浏览: 20
### 处理方案
为了实现所需的功能,可以通过以下方式完成:
1. **设置终止时间戳**:定义一个变量 `end_timestamp` 来表示终止时间戳。
2. **遍历 DataFrame 行**:利用 `iterrows()` 或更高效的矢量化操作来逐行检查条件。
3. **判断条件并停止循环**:当 ACC_TIME 列或 PPG_TIME 列的时间戳大于等于终止时间戳时,退出循环。
4. **保存符合条件的数据到 CSV 文件**:将满足条件前的所有行写入新的 CSV 文件。
以下是完整的 Python 脚本示例[^1]:
```python
import pandas as pd
# 假设初始数据如下
data = {
'ACC_TIME': [1608854400, 1609027200, 1609113600],
'PPG_TIME': [1608854401, 1609027201, 0]
}
df = pd.DataFrame(data)
# 设置终止时间戳 (单位: 秒)
end_timestamp = 1609027200
# 遍历 DataFrame 并筛选符合条件的行
filtered_rows = []
for index, row in df.iterrows():
acc_time = int(row['ACC_TIME']) if not pd.isna(row['ACC_TIME']) and row['ACC_TIME'] != 0 else float('inf')
ppg_time = int(row['PPG_TIME']) if not pd.isna(row['PPG_TIME']) and row['PPG_TIME'] != 0 else float('inf')
# 如果任意一列的时间戳超过结束时间,则停止循环
if acc_time >= end_timestamp or ppg_time >= end_timestamp:
break
filtered_rows.append(row)
# 将过滤后的行转为新 DataFrame
result_df = pd.DataFrame(filtered_rows)
# 存储结果到 CSV 文件
output_file = "output.csv"
result_df.to_csv(output_file, index=False)
print(f"符合条件的行已保存至 {output_file}")
```
#### 关键点说明
- 使用 `int()` 和 `float('inf')` 确保非数值型数据不会干扰逻辑判断[^2]。
- 当 ACC_TIME 或 PPG_TIME 的值为空或者为零时,默认将其视为无穷大 (`float('inf')`),从而跳过这些记录。
- 循环结束后,使用 `to_csv()` 方法将结果保存到指定路径下的 CSV 文件中。
---
### 性能优化建议
如果数据量较大,推荐采用矢量化方法替代显式的迭代。例如,可以直接通过布尔索引来选取符合条件的子集:
```python
mask = (df['ACC_TIME'].astype(float).fillna(float('inf')) < end_timestamp) & \
(df['PPG_TIME'].astype(float).fillna(float('inf')) < end_timestamp)
result_df = df[mask]
# 导出到 CSV 文件
result_df.to_csv("optimized_output.csv", index=False)
```
此方法避免了逐行计算带来的性能开销,适合大规模数据场景。
---
### 注意事项
- 时间戳应统一为整数形式(秒级),以确保比较的一致性和准确性。
- 若原始数据存在缺失值或异常值,需提前清理或填充默认值,以免影响后续处理逻辑。
---
阅读全文
相关推荐

















