给定一个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)的新列的最简单方法是什么?
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放入“新”列?
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()部分对齐索引的工作方式:
NaN
df.index
Index
pandas
reindex
align
DataFrame.align()
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