[解決済み] 既存のDataFrameに新しい列を追加する方法は?
2022-03-18 21:23:29
質問
以下のようなインデックス付きDataFrameがあり、列と行に名前がついています。
a b c d
2 0.671399 0.101208 -0.181532 0.241273
3 0.446172 -0.243316 0.051767 1.577318
5 0.614758 0.075793 -0.451460 -0.012493
新しいカラムを追加したいのですが。
'e'
を既存のデータフレームに追加し、データフレーム内を何も変更したくない(つまり、新しい列は常にデータフレームと同じ長さである)。
0 -0.335485
1 -1.166658
2 -0.385571
dtype: float64
カラムを追加するには
e
を上記の例に追加してください。
どのように解決するのですか?
2017年を編集する
コメントや@Alexanderの指摘にあるように、現在、DataFrameの新しいカラムとしてSeriesの値を追加する最善の方法は
assign
:
df1 = df1.assign(e=pd.Series(np.random.randn(sLength)).values)
2015年を編集する
が表示されるという報告もありました。
SettingWithCopyWarning
このコードで
しかし、このコードは現在のpandasバージョン0.16.1でも完全に動作しています。
>>> sLength = len(df1['a'])
>>> df1
a b c d
6 -0.269221 -0.026476 0.997517 1.294385
8 0.917438 0.847941 0.034235 -0.448948
>>> df1['e'] = pd.Series(np.random.randn(sLength), index=df1.index)
>>> df1
a b c d e
6 -0.269221 -0.026476 0.997517 1.294385 1.757167
8 0.917438 0.847941 0.034235 -0.448948 2.228131
>>> pd.version.short_version
'0.16.1'
は
SettingWithCopyWarning
は、Dataframeのコピーに無効な代入が行われた可能性があることを知らせることを目的としています。必ずしも間違ったことをしたとは言いませんが(誤検出を引き起こす可能性があります)、0.13.0からは、同じ目的のためにもっと適切な方法があることを知らせてくれます。もし警告が出たら、そのアドバイスに従えばいいのです。
.loc[row_index,col_indexer] = valueで代用してみてください。
>>> df1.loc[:,'f'] = pd.Series(np.random.randn(sLength), index=df1.index)
>>> df1
a b c d e f
6 -0.269221 -0.026476 0.997517 1.294385 1.757167 -0.050927
8 0.917438 0.847941 0.034235 -0.448948 2.228131 0.006109
>>>
実際、これは現在より効率的な方法です。 pandasのドキュメントに記載されている
オリジナルの回答です。
元のdf1インデックスを使用してシリーズを作成します。
df1['e'] = pd.Series(np.random.randn(sLength), index=df1.index)
関連
-
Python jiabaライブラリの使用方法について説明
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] 空のPandas DataFrameを作成し、それを埋める?
-
[解決済み] pandas GroupByを使ってグループごとの統計情報(カウント、平均値など)を取得する?
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
Pythonによるjieba分割ライブラリ
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。