如何用Python基于现有数据集构建年份时间向量?
问题:构建年份时间向量遇到的错误与异常输出
我正尝试基于现有数据集构建年份时间向量,先后尝试两段代码均出现问题:
第一段代码及报错
df = pd.read_csv("temp.csv") date = df['DATE'].apply(lambda x : str(x)[:4]) time_vector = np.arange(date.min(), date.max() + 1)
报错信息:can only concatenate str (not "int") to str
第二段代码及异常输出
df = pd.read_csv("temp.csv") date = df['DATE'].apply(lambda x : str(x)[:4]) df['DATE'] = pd.to_datetime(df['DATE']) # Ensure 'DATE' column is in datetime format time_vector = np.arange(df['DATE'].min().year, df['DATE'].max().year + 1)
输出结果:仅返回[1970]
解决建议
1. 修复日期解析问题(针对[1970]异常)
输出[1970]是因为pd.to_datetime无法正确解析你的日期格式,默认返回Unix纪元起始年。解决步骤:
- 检查
temp.csv中DATE列的实际格式(如YYYY-MM-DD、MM/DD/YYYY、DD-MM-YYYY等) - 给
pd.to_datetime指定format参数强制匹配格式,示例:# 假设日期格式是YYYY-MM-DD,其他格式替换对应占位符 df['DATE'] = pd.to_datetime(df['DATE'], format='%Y-%m-%d') - 用
df['DATE'].isna().sum()检查是否存在解析失败的空值,若有需清理或修正这些异常数据
2. 修正第一段代码的类型错误
第一段报错是因为提取的年份是字符串类型,而np.arange需要整数输入。直接将提取的年份转为整数即可:
df = pd.read_csv("temp.csv") date_years = df['DATE'].apply(lambda x: int(str(x)[:4])) time_vector = np.arange(date_years.min(), date_years.max() + 1)
注意:这种方法依赖日期字符串前四位为有效年份,可靠性低于datetime解析方式。
3. 完整可靠的实现方案
推荐优先使用datetime类型处理日期,流程如下:
import pandas as pd import numpy as np # 读取数据并解析日期(指定正确格式) df = pd.read_csv("temp.csv") df['DATE'] = pd.to_datetime(df['DATE'], format='%Y-%m-%d', errors='coerce') # 过滤解析失败的行(根据业务需求选择保留或处理) df = df.dropna(subset=['DATE']) # 提取年份范围并生成时间向量 min_year = df['DATE'].dt.year.min() max_year = df['DATE'].dt.year.max() time_vector = np.arange(min_year, max_year + 1)
内容的提问来源于stack exchange,提问作者ApplePie123
相关产品推荐
相关产品推荐

