NumPy从多CSV文件提取日期列时出现切片无效TypeError问题求助
解决方案
错误原因
pandas DataFrame 不支持直接使用[行切片, 列索引]的numpy风格索引语法,这类按位置取值的操作需要搭配.iloc位置索引器才能生效,这是你触发TypeError的直接原因。
另外补充一个容易踩的坑:pd.read_csv默认会把文件首行作为表头读取为DataFrame的列名,你加载后的数据本身就已经跳过了表头行,不需要额外加1:的行切片,否则会丢失第一行有效数据。
修改后代码
import pandas as pd import numpy as np def import_dates(): # 读取文件时直接指定解析第二列为日期类型,后续不需要额外转格式 CA = pd.read_csv('CA.csv', parse_dates=[1]) NY = pd.read_csv('NY.csv', parse_dates=[1]) MN = pd.read_csv('MN.csv', parse_dates=[1]) TN = pd.read_csv('TN.csv', parse_dates=[1]) FL = pd.read_csv('FL.csv', parse_dates=[1]) # 用iloc按位置取第二列(索引为1)的所有行,转numpy数组 CA_time = CA.iloc[:, 1].to_numpy() NY_time = NY.iloc[:, 1].to_numpy() MN_time = MN.iloc[:, 1].to_numpy() TN_time = TN.iloc[:, 1].to_numpy() FL_time = FL.iloc[:, 1].to_numpy() # 按列拼接为(单文件数据行数,5)的目标数组 date_series = np.column_stack([CA_time, NY_time, MN_time, TN_time, FL_time]) return date_series
可选简化写法
可以用循环批量处理文件,减少重复代码:
def import_dates(): states = ['CA', 'NY', 'MN', 'TN', 'FL'] date_cols = [] for state in states: df = pd.read_csv(f'{state}.csv', parse_dates=[1]) date_cols.append(df.iloc[:, 1].to_numpy()) return np.column_stack(date_cols)
内容的提问来源于stack exchange,提问作者Renaissance Man
相关产品推荐
相关产品推荐

