如何在Python中高效实例化并操作海量变量(Pandas场景)
高效处理990列预测数据的Python方案
懂了,手动处理990列简直要命,给你几个高效的Pythonic方案,彻底替代那些重复操作:
方法1:直接生成目标Numpy数组(最简洁高效)
如果你的最终目标只是得到那组numpy数组,完全可以跳过中间的变量和字典步骤,直接借助Pandas和Numpy的内置优化方法完成:
import pandas as pd import numpy as np # 读取数据 data = pd.read_csv('data.csv') # 筛选所有以"prediction"开头的列(适配prediction0到prediction989的命名规则) prediction_cols = data.filter(like='prediction') # 直接转成numpy数组,shape为(行数, 990),和你原代码的最终结果结构一致 prediction_array = prediction_cols.to_numpy() # 如果需要和原代码的数组维度完全匹配(比如(1, 行数, 990)),可扩展维度 predictionList = np.expand_dims(prediction_array, axis=0)
这种方式完全不需要循环,Pandas内部做了性能优化,数据量越大,比手动循环的优势越明显。
方法2:保留字典列表的中间步骤(若业务需要)
如果你确实需要保留self.history这种每行是字典的列表,也不用手动赋值变量,用Pandas的to_dict方法一键生成:
import pandas as pd import numpy as np data = pd.read_csv('data.csv') prediction_cols = data.filter(like='prediction') # 直接生成每行的字典列表,每个字典的key对应列名(prediction0到prediction989) self.history = prediction_cols.to_dict('records') # 转成numpy数组,用列表推导式替代原代码的map+lambda,更直观易懂 predictionList = np.array([[row[col] for col in prediction_cols.columns] for row in self.history]) # 按需扩展维度 predictionList = np.expand_dims(predictionList, axis=0)
关键细节说明
data.filter(like='prediction'):快速筛选所有列名包含prediction的列,不用手动写990个列名;如果列名是严格的prediction0到prediction989,也可以用data[[f'prediction{i}' for i in range(990)]]精准选取。to_numpy():Pandas官方推荐的DataFrame转Numpy数组的方法,比手动转列表再拼接数组高效数倍。to_dict('records'):一键将DataFrame的每一行转换为字典,key为列名、value为对应行的值,直接生成你需要的self.history列表。
不管是990列还是更多列,这些方法都能一行代码搞定重复操作~
内容的提问来源于stack exchange,提问作者mad
相关产品推荐
相关产品推荐

