我有以下带命名列和行的索引数据帧-非连续数字:
a b c d
2 0.671399 0.101208 -0.181532 0.241273
3 0.446172 -0.243316 0.051767 1.577318
5 0.614758 0.075793 -0.451460 -0.012493
我想在现有数据帧中添加一个新列'e'
,并且不想更改数据帧中的任何内容(即,新列的长度始终与数据帧的长度相同)。
0 -0.335485
1 -1.166658
2 -0.385571
dtype: float64
我尝试了join
、append
、merge
的不同版本,但没有得到我想要的结果,最多只有错误。如何将列e
添加到上述示例中?
我假设
e
中的索引值与df1
中的索引值匹配。启动名为
e
的新列并为其分配序列e
中的值的最简单方法是:分配(熊猫0.16.0+)
从Pandas 0.16.0开始,您还可以使用^{} ,它将新列分配给一个DataFrame,并返回一个新对象(一个副本),除了新列之外,还返回所有原始列。
根据this example(还包括
assign
函数的源代码),还可以包含多个列:结合你的例子:
这个新特性首次引入时的描述可以在here中找到。
使用原始df1索引创建序列:
编辑2015
有人报告说用这段代码得到了
SettingWithCopyWarning
但是,代码仍然与当前的pandas版本0.16.1完美地运行。SettingWithCopyWarning
旨在通知数据帧副本上可能无效的赋值。它不一定说你做错了(它可以触发误报),但从0.13.0开始,它让你知道有更多的方法可以达到同样的目的。然后,如果收到警告,只需遵循其建议:尝试使用.loc[row_index,col_indexer]=value而不是实际上,这是目前更有效的方法,如described in pandas docs
编辑2017
如注释和@Alexander所示,当前将序列值添加为数据帧的新列的最佳方法可能是使用^{} :
这是添加新列的简单方法:
df['e'] = e
相关问题 更多 >
编程相关推荐