回答:
私が正しく理解していれば、割り当ては次のように満たされるはずです。
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
A B
0 1 2
1 2 3
2 3 4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
df
が空の場合は、使用することができますdf['new'] = pd.Series()
(下記の私の回答を参照)
DSMの回答に追加して、この関連する質問に基づいて、アプローチを2つのケースに分割します。
単一の列の追加:空の値を新しい列に割り当てるだけです。たとえば、 df['C'] = np.nan
複数の列の追加:.reindex(columns=[...])
パンダの方法を使用して、新しい列をデータフレームの列インデックスに追加することをお勧めします。これは、を使用して複数の新しい行を追加する場合にも機能し.reindex(rows=[...])
ます。Pandasの新しいバージョン(v> 0.20)axis
では、columns
またはに明示的に割り当てるのではなく、キーワードを指定できることに注意してくださいrows
。
複数の列を追加する例を次に示します。
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
または
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
また、常に新しい(空の)データフレームを既存のデータフレームに連結することもできますが、それは私にはPythonのようには感じられません:)
version >= 0.20.0
、DataFrame を削除し、新しい列を行として追加します。version < 0.20.0
Pandasバージョンで問題なく動作する例0.24.1
, axis=1
で必要とするように機能しませんでしたversion = 0.25
。更新されたバージョンを含めるように回答を変更しようとしましたが、@ kenlukasおよび@il_raffaによって拒否されました。私のように、あなたの応答がなぜ彼らにとってうまくいかないのか理解するのに苦労しているすべての人が、少なくともこのコメントに出くわすことを願っています。
さらに簡単な解決策は次のとおりです。
df = df.reindex(columns = header_list)
「header_list」は、表示するヘッダーのリストです。
リストに含まれ、データフレーム内にまだ見つからないヘッダーは、下の空白セルとともに追加されます。
そうなら
header_list = ['a','b','c', 'd']
次に、cとdが空白セルの列として追加されます
以降ではv0.16.0
、DF.assign()
新しい列(割り当てるために使用することができ、単一/複数のへの)DF
。これらの列は、の最後にアルファベット順に挿入されますDF
。
これは、返されたデータフレームで一連の連鎖操作を直接実行したい場合の単純な割り当てと比較して有利になります。
DF
@DSMで示されている同じサンプルを考えてみます。
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
A B
0 1 2
1 2 3
2 3 4
df.assign(C="",D=np.nan)
Out[21]:
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
これは、以前に作成されたすべての列と新しく作成された列を含むコピーを返すことに注意してください。オリジナルDF
をそれに応じて変更するには、現在の操作をdf = df.assign(...)
サポートしていないため、:のように使用しinplace
ます。
以下のコードは、「既存のデータフレームにn個の空の列を追加するにはどうすればよいですか」という質問に対処します。同様の問題の解決策を1か所にまとめるために、ここに追加します。
アプローチ1(1〜64の列名で64の追加列を作成する)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
アプローチ2(1〜64の列名で64の追加列を作成する)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
できるよ
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
N/A
ですか?