如何将numpy rec.array转换为指定格式的Pandas DataFrame?
解决numpy rec.array转Pandas DataFrame列数异常的问题
直接用pd.DataFrame(my_list)会把rec.array里的嵌套数组逐个展开成独立列,这就是你得到90多列的核心原因——每个单元素/多元素数组都被拆成了单独列,而非合并成你需要的5列结构。
给你两种靠谱的处理方案:
方法一:直接提取字段合并(效率优先)
这种方式利用numpy的数组原生操作,适合大数据量场景:
import numpy as np import pandas as pd # 如果你传入的是多个rec.array组成的列表,先合并成一个完整的rec.array combined_rec = np.concatenate(my_list) # 提取weights字段并扁平化(把每个单元素数组转成标量) weights = combined_rec['weights'].flatten() # 提取integration字段,它本身就是(32,4)的二维数组结构 integration_cols = combined_rec['integration'] # 合并数据并指定列名 df = pd.DataFrame( np.column_stack([weights, integration_cols]), columns=['Weights', 'v_1', 'v_2', 'v_3', 'v_4'] )
方法二:逐行拆解(直观易懂)
如果数据量不大,这种方式逻辑更清晰,容易调试:
import numpy as np import pandas as pd # 先合并多个rec.array(如果是列表形式的话) combined_rec = np.concatenate(my_list) # 逐行拆解rec.array的字段,构造目标DataFrame df = pd.DataFrame([ { 'Weights': row['weights'][0], 'v_1': row['integration'][0], 'v_2': row['integration'][1], 'v_3': row['integration'][2], 'v_4': row['integration'][3] } for row in combined_rec ])
两种方法都能生成你需要的32行5列DataFrame。
内容的提问来源于stack exchange,提问作者Dorito0102
相关产品推荐
相关产品推荐

