使用pd.read_pickle读取pkl文件时仅返回第一行的问题咨询
问题原因
你当前读取到的结果是一维numpy数组,仅包含列名信息,说明目标.pkl文件当前存储的内容就只有列名数组,并非完整的表格数据。大概率是你当初生成该pkl文件时,误将列名对象传入了to_pickle接口,而非完整的DataFrame对象。
解决步骤
- 第一步:先确认当前pkl的存储内容属性,运行如下代码:
import pandas as pd data = pd.read_pickle("./Process.pkl") print(type(data)) print(data.shape)
如果输出为<class 'numpy.ndarray'>且shape为(7,),即可确认该pkl仅存储了列名数据。
- 第二步:修正pkl生成逻辑,存储完整DataFrame
回到生成该pkl文件的代码环节,确认存储的是完整的表格对象,正确存储参考代码如下:
import pandas as pd # 你的完整业务数据生成逻辑 full_df = pd.DataFrame( 你的原始数据源, columns=['Var1', 'Var2', 'Vartestsmoo', 'Var3', 'Var4', 'Var5', 'Var6'] ) # 存储完整DataFrame到pkl full_df.to_pickle("./Process.pkl")
重新存储后再用pd.read_pickle读取即可拿到完整表格内容。
- 第三步:无生成代码时的全量读取方案
如果你找不到该pkl的生成逻辑,可以用pickle原生库尝试读取文件中可能存在的其他序列化对象:
import pickle with open("./Process.pkl", "rb") as f: while True: try: obj = pickle.load(f) print(obj) print("-"*60) except EOFError: break
如果该pkl序列化时写入了多个对象,该代码会输出所有存储内容。
内容的提问来源于stack exchange,提问作者DobbyL
相关产品推荐
相关产品推荐

