You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python技术求助:如何合并CSV中多列日期时间数据为单列

解决方案:合并分散的日期时间列并绘制关系图

嘿,我来帮你搞定这个问题!把CSV里分散的day、month、year、hours、minutes、seconds列合并成单个datetime列,再用来和测量参数绘图,用Pandas就能轻松实现,我给你一步步拆解:

1. 准备必要的库

首先确保你安装了Pandas(没装的话,在终端跑pip install pandas就行),然后导入需要的库:

from matplotlib import pyplot as plt
import pandas as pd

2. 读取CSV文件

用Pandas的read_csv加载你的数据,假设你的CSV文件名叫measurements.csv:

df = pd.read_csv('measurements.csv')

3. 合并日期时间列成单列

Pandas的pd.to_datetime方法专门处理这种分散的时间列,你只需要把对应的列名传进去就行:

# 合并成新的datetime列,命名为'datetime'
df['datetime'] = pd.to_datetime(
    df[['year', 'month', 'day', 'hours', 'minutes', 'seconds']],
    errors='coerce'  # 遇到无效时间值时转为NaT,避免程序崩溃
)

这里要注意:确保你的列名和括号里的列表对应,如果有个别行的时间数据格式不对,errors='coerce'会帮你妥善处理,不会让代码报错中断。

4. 绘制日期时间与测量参数的关系图

假设你的测量参数列名叫measurement_value,现在就可以直接用合并后的datetime列绘图了:

plt.figure(figsize=(12, 6))
plt.plot(df['datetime'], df['measurement_value'], marker='o', linestyle='-', alpha=0.7)
plt.xlabel('日期时间')
plt.ylabel('测量参数')
plt.title('日期时间与测量参数趋势图')
plt.xticks(rotation=45)  # 旋转x轴标签,避免文字重叠
plt.tight_layout()  # 自动调整布局,防止标签被截断
plt.show()

完整示例代码

把上面的步骤整合起来,就是可以直接运行的完整代码:

from matplotlib import pyplot as plt
import pandas as pd

# 读取CSV数据
df = pd.read_csv('measurements.csv')

# 合并日期时间列
df['datetime'] = pd.to_datetime(
    df[['year', 'month', 'day', 'hours', 'minutes', 'seconds']],
    errors='coerce'
)

# 可选:检查是否有无效的时间值
print("无效时间值的数量:", df['datetime'].isna().sum())

# 绘制关系图(记得替换成你实际的测量参数列名)
plt.figure(figsize=(12, 6))
plt.plot(df['datetime'], df['measurement_column'], marker='.', linestyle='-')
plt.xlabel('Datetime')
plt.ylabel('Measurement Parameter')
plt.title('Trend of Measurement Over Time')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

要是你的测量参数列名不是measurement_column,记得替换成你CSV里的实际列名哦!如果遇到某列是字符串类型导致合并失败,可以先用df['year'] = df['year'].astype(int)把列转成整数类型再尝试合并。

内容的提问来源于stack exchange,提问作者harriet123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:37:16