1. ホーム
  2. python

[解決済み] pandas dataframeに定数値を持つカラムを追加する [重複].

2022-05-15 22:43:21

質問

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

定数値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を置く理由がわからないのですか?

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 となることです。 でないところでは を整列させます。を弄って reindexalign メソッドを使って、部分的に整列したインデックス、完全に整列したインデックス、整列していないインデックスを持つオブジェクトの整列動作について、いくつかの直感的な情報を得ることができます。例えば、以下のように 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