You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas DataFrame未知列列表拆分为行的实现方法

解决方法:将DataFrame中列的列表元素转为对应行

针对你这种每列都是列表数据、想要把列表元素横向转纵向对应成行的需求,这里有几种实用的方法,根据你的pandas版本来选择:

方法一:使用explode(推荐,pandas 1.3.0+)

从pandas 1.3.0版本开始,explode支持同时对多列进行操作,只要每列的列表长度一致,一行代码就能搞定:

import pandas as pd

# 假设你的DataFrame名为df
result = df.explode(df.columns.tolist())
# 重置索引(可选,去掉原来的行索引)
result = result.reset_index(drop=True)

举个实际例子,比如你的输入DataFrame是:

data = {
    'numberArray1': [[32.09561, 32.43092, 32.37599]],
    'numberArray10': [[37.015972, 37.015972, 36.889534]],
    'numberArray11': [[996.2953, 996.2609, 996.28845]]
}
df = pd.DataFrame(data)

运行上面的代码后,result就是你想要的结构:

numberArray1numberArray10numberArray11
32.0956137.015972996.2953
32.4309237.015972996.2609
32.3759936.889534996.28845

方法二:兼容旧版pandas(1.3.0以下)

如果你的pandas版本较低,不支持多列explode,可以用apply结合pd.DataFrame来实现:

# 遍历每一行,将每个列的列表转为DataFrame的列,再合并所有行的结果
result = df.apply(lambda row: pd.DataFrame({col: row[col] for col in df.columns}), axis=1).concat()
# 重置索引
result = result.reset_index(drop=True)

这个方法同样能得到和上面一致的结果,只是代码稍微长一点。

处理列表长度不一致的情况

如果不同列的列表长度不一样,直接explode会报错,这时候可以根据需求处理:

1. 截断到最短列表的长度

# 获取所有列中最短的列表长度
min_length = min(df.apply(lambda col: len(col.iloc[0])).values)
# 截断每个列的列表到最短长度
df_truncated = df.apply(lambda col: col.apply(lambda lst: lst[:min_length]))
# 再执行explode
result = df_truncated.explode(df.columns.tolist())

2. 填充NaN到最长列表的长度

# 获取所有列中最长的列表长度
max_length = max(df.apply(lambda col: len(col.iloc[0])).values)
# 给短列表填充NaN,补到最长长度
df_padded = df.apply(lambda col: col.apply(lambda lst: lst + [pd.NA]*(max_length - len(lst))))
# 执行explode
result = df_padded.explode(df.columns.tolist())

这样就能处理不同长度列表的情况,避免报错。

内容的提问来源于stack exchange,提问作者Ahmad Ahsan Saleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:38:09