我不知道为什么这会让NaN进入"新"栏目?
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
Run Code Online (Sandbox Code Playgroud)
Rok*_*jic 32
使用现代熊猫,您可以这样做:
df['new'] = 0
Run Code Online (Sandbox Code Playgroud)
cs9*_*s95 25
对于就地修改,执行直接分配。熊猫会为每一行广播此任务。
df = pd.DataFrame('x', index=range(4), columns=list('ABC'))
df
A B C
0 x x x
1 x x x
2 x x x
3 x x x
Run Code Online (Sandbox Code Playgroud)
df['new'] = 'y'
# Same as,
# df.loc[:, 'new'] = 'y'
df
A B C new
0 x x x y
1 x x x y
2 x x x y
3 x x x y
Run Code Online (Sandbox Code Playgroud)
DataFrame.assign如果您需要副本,请使用DataFrame.assign:
df.assign(new='y')
A B C new
0 x x x y
1 x x x y
2 x x x y
3 x x x y
Run Code Online (Sandbox Code Playgroud)
而且,如果您需要分配多个具有相同值的列,这很简单,
c = ['new1', 'new2', ...]
df.assign(**dict.fromkeys(c, 'y'))
A B C new1 new2
0 x x x y y
1 x x x y y
2 x x x y y
3 x x x y y
Run Code Online (Sandbox Code Playgroud)
多列分配
最后,如果需要分配具有不同值的多列,则可以使用assign字典。
c = {'new1': 'w', 'new2': 'y', 'new3': 'z'}
df.assign(**c)
A B C new1 new2 new3
0 x x x w y z
1 x x x w y z
2 x x x w y z
3 x x x w y z
Run Code Online (Sandbox Code Playgroud)
Phi*_*oud 19
这使之所以NaN成一列是因为df.index和Index你右手边的对象是不同的.@zach显示了分配新的零列的正确方法.通常,pandas尝试尽可能多地对齐索引.一个缺点是,当指数没有对齐时,NaN无论它们在哪里都不对齐.使用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
Run Code Online (Sandbox Code Playgroud)
这是使用 lambdas 的另一个班轮(创建具有常量值 = 10 的列)
df['newCol'] = df.apply(lambda x: 10, axis=1)
Run Code Online (Sandbox Code Playgroud)
前
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
Run Code Online (Sandbox Code Playgroud)
后
df
A B C newCol
1 1.764052 0.400157 0.978738 10
2 2.240893 1.867558 -0.977278 10
3 0.950088 -0.151357 -0.103219 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76423 次 |
| 最近记录: |