在Pandas DataFrame中将单列拆分为多列的技术方案问询
Pandas单列拆分多列的解决方案
步骤1:解析CSV中的列表字符串
CSV里的coords和areas列实际是字符串形式的列表,直接导入后无法直接操作,需要先转换成Python原生列表:
import pandas as pd import ast # 导入CSV文件 df = pd.read_csv('your_file.csv') # 将字符串格式的列表转成真实列表 df['coords'] = df['coords'].apply(ast.literal_eval) df['areas'] = df['areas'].apply(ast.literal_eval)
步骤2:拆分列表列为多列
利用pd.DataFrame()将列表列直接拆分为多列,再按规则命名:
拆分coords列
# 拆分coords为多列,命名为c1、c2、c3... coords_split = pd.DataFrame(df['coords'].tolist(), index=df.index) coords_split.columns = [f'c{i+1}' for i in coords_split.columns]
拆分areas列
# 拆分areas为多列,命名为a1、a2、a3... areas_split = pd.DataFrame(df['areas'].tolist(), index=df.index) areas_split.columns = [f'a{i+1}' for i in areas_split.columns]
步骤3:合并所有列
将原file列与拆分后的列合并,系统会自动用NaN填充长度不足的行:
final_df = pd.concat([df['file'], coords_split, areas_split], axis=1)
完整代码示例
import pandas as pd import ast # 导入并解析数据 df = pd.read_csv('your_file.csv') df['coords'] = df['coords'].apply(ast.literal_eval) df['areas'] = df['areas'].apply(ast.literal_eval) # 拆分列表列 coords_split = pd.DataFrame(df['coords'].tolist(), index=df.index) coords_split.columns = [f'c{i+1}' for i in coords_split.columns] areas_split = pd.DataFrame(df['areas'].tolist(), index=df.index) areas_split.columns = [f'a{i+1}' for i in areas_split.columns] # 合并得到最终结果 final_df = pd.concat([df['file'], coords_split, areas_split], axis=1) print(final_df.head())
关键说明
pd.DataFrame(df['列'].tolist())会自动适配不同长度的列表:短列表对应的行在多余列中自动填充NaN,完美解决部分行8组数据、部分行14组数据的场景。- 必须先完成字符串到真实列表的转换,否则拆分操作会因数据类型错误失败。
内容的提问来源于stack exchange,提问作者Iuri Sampaio
相关产品推荐
相关产品推荐

