将具有恒定值的列添加到pandas数据框 [英] Add column with constant value to pandas dataframe
问题描述
给出一个数据框:
np.random.seed(0)
df = pd.DataFrame(np.random.randn(3, 3), columns=list('ABC'), index=[1, 2, 3])
df
A B C
1 1.764052 0.400157 0.978738
2 2.240893 1.867558 -0.977278
3 0.950088 -0.151357 -0.103219
添加包含常量值(例如0)的新列的最简单方法是什么?
What is the simplest way to add a new column containing a constant value eg 0?
A B C new
1 1.764052 0.400157 0.978738 0
2 2.240893 1.867558 -0.977278 0
3 0.950088 -0.151357 -0.103219 0
这是我的解决方案,但我不知道为什么这会将NaN放入新"列?
This is my solution, but I don't know why this puts NaN into 'new' column?
df['new'] = pd.Series([0 for x in range(len(df.index))])
A B C new
1 1.764052 0.400157 0.978738 0.0
2 2.240893 1.867558 -0.977278 0.0
3 0.950088 -0.151357 -0.103219 NaN
推荐答案
之所以将NaN
放入列中,是因为右侧对象的df.index
和Index
不同. @zach显示了分配新的零列的正确方法.通常,pandas
尝试尽可能多地对齐索引.缺点之一是,当索引未对齐时,无论没有对齐,都会得到NaN
.尝试使用reindex
和align
方法来获得一些直觉,以便对具有部分,完全和未对齐所有对齐索引的对象进行对齐.例如,以下是DataFrame.align()
与部分对齐的索引一起工作的方式:
The reason this puts NaN
into a column is because df.index
and the Index
of your right-hand-side object are different. @zach shows the proper way to assign a new column of zeros. In general, pandas
tries to do as much alignment of indices as possible. One downside is that when indices are not aligned you get NaN
wherever they aren't aligned. Play around with the reindex
and align
methods to gain some intuition for alignment works with objects that have partially, totally, and not-aligned-all aligned indices. For example here's how DataFrame.align()
works with partially aligned indices:
In [7]: from pandas import DataFrame
In [8]: from numpy.random import randint
In [9]: df = DataFrame({'a': randint(3, size=10)})
In [10]:
In [10]: df
Out[10]:
a
0 0
1 2
2 0
3 1
4 0
5 0
6 0
7 0
8 0
9 0
In [11]: s = df.a[:5]
In [12]: dfa, sa = df.align(s, axis=0)
In [13]: dfa
Out[13]:
a
0 0
1 2
2 0
3 1
4 0
5 0
6 0
7 0
8 0
9 0
In [14]: sa
Out[14]:
0 0
1 2
2 0
3 1
4 0
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
Name: a, dtype: float64
这篇关于将具有恒定值的列添加到pandas数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!