如何将DataFrame单行中的多个数组合并为单个数组?
解决DataFrame行内多个数组合并为单个数组的问题
针对你提供的场景,要把DataFrame每行里的多个数组合并成一个扁平的列表/数组,这里提供几种实用的实现方式:
方法一:用NumPy拼接(简洁高效)
直接利用np.concatenate对整行的数组进行拼接,再转成列表格式:
import numpy as np import pandas as pd # 初始化原数据 data = np.array([([6,5,6], [2,6,3], [3,4,5]), ([0,9,4], [7,6,5], [8,2,4]), (1,3,5)]) df = pd.DataFrame(data) # 合并第一行得到target1 target1 = np.concatenate(df.iloc[0]).tolist() # 合并第二行得到target2 target2 = np.concatenate(df.iloc[1]).tolist() print(target1) # 输出: [6, 5, 6, 2, 6, 3, 3, 4, 5] print(target2) # 输出: [0, 9, 4, 7, 6, 5, 8, 2, 4]
方法二:手动遍历扩展(直观易懂)
如果不想依赖NumPy的拼接函数,也可以通过遍历行内元素,逐个扩展列表:
# 处理第一行 target1 = [] for arr in df.iloc[0]: target1.extend(arr) # 处理第二行 target2 = [] for arr in df.iloc[1]: target2.extend(arr)
批量处理所有行(兼容非数组行)
如果需要一次性处理所有行,还可以写个自定义函数,同时兼容像第三行这种非数组元素的情况:
def flatten_row(row): try: # 尝试拼接数组 return np.concatenate(row).tolist() except TypeError: # 对非数组行直接返回原元素的列表形式 return row.tolist() # 应用到整个DataFrame flattened_rows = df.apply(flatten_row, axis=1) # 提取结果 print(flattened_rows[0]) # 对应target1 print(flattened_rows[1]) # 对应target2
内容的提问来源于stack exchange,提问作者EmKau
相关产品推荐
相关产品推荐

