编辑2017年
如注释中和@Alexander所示,目前将序列的值添加为 DataFrame 的新列的最佳方法是使用赋值
:
df1 = df1.assign(e=pd.Series(np.random.randn(sLength)).values)
编辑 2015
有些人报告得到这个代码。
但是,该代码仍然与当前的 pandas 版本 0.16.1 完美运行。SettingWithCopyWarning
>>> sLength = len(df1['a'])
>>> df1
a b c d
6 -0.269221 -0.026476 0.997517 1.294385
8 0.917438 0.847941 0.034235 -0.448948
>>> df1['e'] = pd.Series(np.random.randn(sLength), index=df1.index)
>>> df1
a b c d e
6 -0.269221 -0.026476 0.997517 1.294385 1.757167
8 0.917438 0.847941 0.034235 -0.448948 2.228131
>>> pd.version.short_version
'0.16.1'
目的是通知数据帧副本上可能无效的赋值。它并不一定说你做错了(它可能会触发误报),但从0.13.0开始,它让你知道有更合适的方法用于相同的目的。然后,如果您收到警告,只需遵循其建议:尝试使用.loc[row_index,col_indexer] = valueSettingWithCopyWarning
>>> df1.loc[:,'f'] = pd.Series(np.random.randn(sLength), index=df1.index)
>>> df1
a b c d e f
6 -0.269221 -0.026476 0.997517 1.294385 1.757167 -0.050927
8 0.917438 0.847941 0.034235 -0.448948 2.228131 0.006109
>>>
事实上,这是目前pandas文档中描述的更有效的方法。
原答:
使用原始 df1 索引创建序列:
df1['e'] = pd.Series(np.random.randn(sLength), index=df1.index)