不使用Pandas导入含datetime.now()的CSV并实现时间运算
解决方案
不用Pandas的话,可以通过Python内置的csv模块读取文件,结合datetime解析时间字符串,再转换为NumPy的datetime64类型(或Unix时间戳),就能满足Matplotlib绘图和NumPy时间间隔计算的需求。
步骤说明
- 用
csv.reader逐行读取CSV内容 - 用
datetime.strptime解析时间字符串(匹配datetime.now()生成的%Y-%m-%d %H:%M:%S.%f格式) - 将解析后的
datetime对象转换为NumPy的datetime64类型(直接支持Matplotlib时间轴和NumPy时间运算),或转换为Unix时间戳(浮点数格式,同样适合计算和绘图)
完整代码示例
import csv from datetime import datetime import numpy as np import matplotlib.pyplot as plt # 初始化存储列表 time_list = [] sensor1_values = [] sensor2_values = [] # 读取并处理CSV文件 with open('sensor_records.csv', 'r', newline='') as csv_file: csv_reader = csv.reader(csv_file) for row in csv_reader: # 解析时间字符串为datetime对象 dt_obj = datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S.%f') # 转换为numpy datetime64类型(推荐,保留时间语义) np_dt = np.datetime64(dt_obj) time_list.append(np_dt) # 读取并转换传感器数据 sensor1_values.append(float(row[1])) sensor2_values.append(float(row[2])) # 转换为numpy数组,方便后续计算和绘图 times = np.array(time_list) sensor1 = np.array(sensor1_values) sensor2 = np.array(sensor2_values) # 示例:计算与第一个时间点的间隔(单位:秒) time_intervals = (times - times[0]).astype('timedelta64[s]').astype(float) print("时间间隔(秒):", time_intervals[:5]) # Matplotlib绘图示例 plt.figure(figsize=(10, 6)) plt.plot(times, sensor1, label='Sensor Data 1', marker='.', linestyle='-') plt.plot(times, sensor2, label='Sensor Data 2', marker='x', linestyle='--') plt.xlabel('Time') plt.ylabel('Sensor Reading') plt.title('Sensor Data Over Time') plt.legend() plt.xticks(rotation=45) plt.tight_layout() # 自动调整布局,避免标签被截断 plt.show()
关键细节
- 时间格式匹配:
%Y-%m-%d %H:%M:%S.%f完全对应datetime.now()输出的带微秒的时间格式,确保解析不会出错。 - NumPy datetime64优势:该类型原生支持时间运算(如直接相减得到时间差),Matplotlib也能自动识别并渲染可读的时间轴,无需额外格式化。
- 备选方案:Unix时间戳:如果更倾向于数值型时间表示,可以用
dt_obj.timestamp()将datetime对象转换为Unix时间戳(浮点数,单位秒),同样可以用于绘图和计算时间间隔。
内容的提问来源于stack exchange,提问作者onix
相关产品推荐
相关产品推荐

