如何将Pandas DataFrame中的列表列拆分为多列?
拆分Pandas DataFrame中列表列的最优方法
你要处理的是把DataFrame中存列表的列拆分成多列,同时保留其他列,下面是最实用的解决方案:
情况1:所有列表长度一致(比如你的示例里都是2个元素)
直接用Pandas原生的高效方法拆分,代码如下:
import pandas as pd # 构造你的原始DataFrame df = pd.DataFrame({'A': [[1,2], [3,4]], 'B': ['X', 'Y']}) # 把列A的列表拆成单独列,指定列名 expanded_cols = pd.DataFrame(df['A'].tolist(), index=df.index, columns=['A_0', 'A_1']) # 和原DataFrame的B列合并,得到最终结果 final_df = pd.concat([expanded_cols, df['B']], axis=1)
情况2:列表长度不固定(有的长有的短)
如果列A里的列表长度不一样,我们可以自动根据最长的列表生成对应列名,短列表的空缺位置会自动填充NaN:
import pandas as pd df = pd.DataFrame({'A': [[1,2], [3,4,5]], 'B': ['X', 'Y']}) # 拆分列表列,自动生成默认列名(0、1、2...) expanded_cols = pd.DataFrame(df['A'].tolist(), index=df.index) # 把默认列名改成A_0、A_1这种格式 expanded_cols.columns = [f'A_{i}' for i in expanded_cols.columns] # 合并得到结果 final_df = pd.concat([expanded_cols, df['B']], axis=1)
你原代码的问题
你写的代码最后一行df[labels] = df[col]只是把原列表直接赋值给新列,并没有拆分列表,所以新列里还是存着列表,没有达到拆分的效果。上面的方法通过tolist()把列A的列表转换成二维数组,再用pd.DataFrame直接生成多列,是Pandas里效率最高的方式,比逐行apply处理快得多,尤其是数据量大的时候。
内容的提问来源于stack exchange,提问作者Micah sherry
相关产品推荐
相关产品推荐

