如何在Pandas DataFrame中创建多列?拆分行内像素为独立列
嘿,我来帮你搞定这两个Pandas的问题!先聊聊怎么给DataFrame创建多列,再处理你说的像素拆分需求~
一、在Pandas DataFrame中创建多列的常用方法
这里有几种实用的方式,你可以根据场景选:
- 直接赋值批量创建:如果要一次性加几列,直接指定列名列表赋值就行。比如要加3个初始值为0的列,或者给不同行分配不同值:
import pandas as pd df = pd.DataFrame({'原列': [1,2,3]}) # 加3个初始值为0的列 df[['列1', '列2', '列3']] = 0 # 给不同行分配不同值 df[['列4', '列5']] = [[10,20], [30,40], [50,60]] - 使用
assign()方法:这个方法不会修改原DataFrame,适合链式操作,还能基于现有列计算新列:# 添加固定值列+基于原列计算的列 df = df.assign( 固定列=100, 计算列=lambda x: x['原列'] * 2 ) - 从列表/字典批量生成:如果有预先准备好的列名和对应数据,直接把数据转成DataFrame赋值就行:
cols = ['x', 'y', 'z'] data = [[1,2,3], [4,5,6], [7,8,9]] df[cols] = pd.DataFrame(data) - 用
apply()生成多列:如果需要基于每行数据生成多个新列,记得加result_type='expand'参数把结果拆成多列:# 基于原列生成两个新列 df[['新列1', '新列2']] = df.apply( lambda row: (row['原列'] + 1, row['原列'] * 3), axis=1, result_type='expand' )
二、将每行像素拆分为独立列的实现
假设你的DataFrame里有一列(比如叫pixels),每行是你给出的那种空格分隔的像素值(或者是数值列表),分两种情况处理:
情况1:像素是空格分隔的字符串格式
比如你的数据长这样:
df = pd.DataFrame({'pixels': [ "0 129 179 242 128 178 241", "1 104 93 75 101 90 72", "2 172 159 176 171 158 175" ]})
处理步骤很简单:用str.split()拆分字符串,expand=True直接把拆分后的列表转成多列,还可以给新列命名:
# 拆分字符串并生成多列 split_pixels = df['pixels'].str.split(' ', expand=True) # 给新列命名(比如pixel_0、pixel_1...) split_pixels.columns = [f'pixel_{i}' for i in split_pixels.columns] # 和原DataFrame合并(如果不需要保留原pixels列,就先drop掉) new_df = pd.concat([df.drop('pixels', axis=1), split_pixels], axis=1)
情况2:像素是列表格式
如果每行的像素已经是Python列表了,比如:
df = pd.DataFrame({'pixels': [ [0, 129, 179, 242, 128, 178, 241], [1, 104, 93, 75, 101, 90, 72], [2, 172, 159, 176, 171, 158, 175] ]})
直接把列表列转成DataFrame就行,比字符串更省事:
split_pixels = pd.DataFrame(df['pixels'].tolist()) split_pixels.columns = [f'pixel_{i}' for i in split_pixels.columns] new_df = pd.concat([df.drop('pixels', axis=1), split_pixels], axis=1)
最后如果不需要保留原pixels列,直接用new_df = split_pixels也可以,完全按你的需求来~
内容的提问来源于stack exchange,提问作者J.SM
相关产品推荐
相关产品推荐

