如何为DataFrame指定行添加Numpy ndarray作为新列?
给DataFrame新增含Numpy数组的列(特定行赋值,其余为NaN)
没问题,这事儿其实挺容易搞定的,我给你一步步拆解实现方法,连细节坑都给你踩平:
步骤1:导入必要库
首先得把pandas和numpy导进来,这俩是处理这类需求的核心工具:
import pandas as pd import numpy as np
步骤2:创建示例DataFrame
先还原你说的测试数据:
df = pd.DataFrame({ 'Name': ['Test', 'Test2'], 'Years': [2, 4] })
步骤3:定义目标Numpy数组
把你要赋值的数组转成numpy格式(当然直接用列表也能存,但用numpy数组更符合你的需求描述):
testarray1 = np.array([100, 101, 1, 0, 0, 5])
步骤4:新增列并赋值
这里有个关键细节:因为我们要在单元格里存数组(属于object类型),直接初始化NaN的话列是float类型,所以得先转成object类型,再给特定行赋值:
# 新增一列,先全部设为NaN,然后转换为object类型(支持存数组) df['array'] = np.nan df['array'] = df['array'].astype(object) # 给Name为'Test'的行赋值数组,注意要把数组包在列表里! df.loc[df['Name'] == 'Test', 'array'] = [testarray1]
为什么要把数组包在列表里?
如果直接写df.loc[...,'array'] = testarray1,pandas会误以为你要把数组的每个元素分别赋值给多行,但我们是要把整个数组作为单个元素放进单元格,所以必须用[testarray1]告诉pandas:这是给这一行的这个单元格的单个值。
验证结果
运行完上面的代码后,打印df看看效果:
print(df)
输出会是:
Name Years array 0 Test 2 [100, 101, 1, 0, 0, 5] 1 Test2 4 NaN
扩展:给其他行赋值不同数组
如果之后需要给其他行也赋值不同的数组,用同样的逻辑就行:
testarray2 = np.array([200, 201, 3]) df.loc[df['Name'] == 'Test2', 'array'] = [testarray2]
内容的提问来源于stack exchange,提问作者quant
相关产品推荐
相关产品推荐

