在pandas数据框中添加具有恒定值的列。

29 浏览
0 Comments

在pandas数据框中添加具有恒定值的列。

给定一个DataFrame:\n

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

\n最简单的方法是如何添加一个包含常量值(例如0)的新列?\n

          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

\n


\n这是我的解决方案,但是我不知道为什么会在\'new\'列中放入NaN值?\n

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

0
0 Comments

问题:如何向pandas数据框中添加一个具有常量值的列?

在这个问题中,当我们将一个常数值赋给一个列时,会出现NaN的原因是因为df.index和右侧对象的Index不同。

pandas试图尽可能地对齐索引,但当索引不对齐时,会在不对齐的位置出现NaN。可以通过调整索引的方式来实现对齐。

下面的代码示例展示了如何使用DataFrame.align()方法对部分对齐的索引进行对齐:

from pandas import DataFrame
from numpy.random import randint
df = DataFrame({'a': randint(3, size=10)})
s = df.a[:5]
dfa, sa = df.align(s, axis=0)

通过上述代码,我们可以看到df和s的索引部分对齐后,dfa的结果如下:

   a
0  0
1  2
2  0
3  1
4  0
5  0
6  0
7  0
8  0
9  0

而sa的结果如下:

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数据框中添加一个具有常量值的列,我们可以使用DataFrame.align()方法对齐索引,然后将常数值赋给对齐后的列。

0
0 Comments

问题出现的原因:用户想要向pandas dataframe中添加一个带有常量值的列,并且希望找到最简单的方法来实现。

解决方法:使用以下代码将带有常量值的列添加到dataframe中:

df['new'] = 0

这种方法比其他方法更简洁,并且易于阅读。其他回答中的方法可能已经过时,或者过于复杂。这个方法更适合那些只想要复制粘贴能够工作的代码的人,而不是想要理解和学习更多关于库的人。但是,如果多次使用这种方法,可能会收到一个警告,即“DataFrame is highly fragmented”。

0
0 Comments

问题的原因是想要在pandas的数据框中添加一个带有常数值的列。解决方法有两种:

一种是使用直接赋值的方法,在原数据框上进行就地修改。这种方法会将赋值广播到每一行。

import pandas as pd
df = pd.DataFrame('x', index=range(4), columns=list('ABC'))
df['new'] = 'y'
df

另一种方法是使用`df.assign()`方法生成一个副本。这种方法可以同时添加多列,并且可以指定新列的类型。

df.assign(new='y')

如果需要同时添加多列并指定不同的值和类型,可以通过传入一个字典来实现。

c = {'new1': 'w', 'new2': 'y', 'new3': 'z'}
df.assign(**c)

以上是解决问题的方法,但是在添加空列表列时需要注意一些问题:

- `object`类型的列在性能方面不好,建议重新思考数据结构。

- 可以考虑使用稀疏数据结构来存储数据。

- 如果必须存储列表列,则需要确保不要复制相同的引用多次,可以使用列表推导式来实现。

df['new'] = [[] for _ in range(len(df))]

最后,如果想要定义新添加列的类型(dtype),是否有一种优雅的方法呢?

0