如何在pandas DataFrame中创建元素为NumPy数组或列表的新列
解决方案
要让pandas列支持存储列表、NumPy数组这类非标量元素,只需要将列的类型指定为object即可,下面是两种常用实现方式:
方法1:初始化空object类型列
适合不需要给全列设置统一初始值的场景:
# 直接创建dtype为object的新列 df['new'] = pd.Series(dtype='object') # 测试赋值操作 df.loc[1, 'new'] = np.array([2 , 'l']) df.loc[2, 'new'] = [2 , 'l']
方法2:初始化全列默认空列表
适合需要给所有行默认赋值空列表的场景,注意不要用[[]]*len(df)的写法,会导致所有行引用同一个列表对象,修改某一行会同步修改所有行,正确写法如下:
# 用列表推导式生成独立的空列表 df['new'] = [[] for _ in range(len(df))]
完整验证示例
import pandas as pd import numpy as np df = pd.DataFrame({'id': [1, 2, 3, 4], 'a': ['on', 'on', 'off', 'off'], 'b': ['on', 'off', 'on', 'off']}) # 初始化新列 df['new'] = pd.Series(dtype='object') # 执行赋值 df.loc[1, 'new'] = np.array([2 , 'l']) df.loc[2, 'new'] = [2 , 'l'] print(df)
运行后输出结果如下:
id a b new 0 1 on on NaN 1 2 on off [2, l] 2 3 off on [2, l] 3 4 off off NaN
内容的提问来源于stack exchange,提问作者Kaihua Hou
相关产品推荐
相关产品推荐

