pandasのデータフレームの列全体に値を設定する
2023-10-18 02:02:25
質問
データフレームの列全体を特定の値に設定しようとしています。
In [1]: df
Out [1]:
issueid industry
0 001 xxx
1 002 xxx
2 003 xxx
3 004 xxx
4 005 xxx
私が見た限りでは
loc
はデータフレーム内の値を置き換える際のベストプラクティスです(そうではありませんか?)
In [2]: df.loc[:,'industry'] = 'yyy'
しかし、それでもこの話題の警告メッセージは表示されました。
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
もし私が
In [3]: df['industry'] = 'yyy'
同じ警告メッセージが表示されました。
何か思い当たることはありますか? Python 3.5.2、pandas 0.18.1で作業しています。
どのように解決するのですか?
Pythonは、既存のオブジェクトから新しいオブジェクトを定義するときに、予期しないことを行うことができます。あなたは上のコメントで、あなたのデータフレームが次のような行で定義されていると述べました。
df = df_all.loc[df_all['issueid']==specific_id,:]
. この場合
df
に格納されている行の代用に過ぎません。
df_all
オブジェクトに格納されている行の代用に過ぎません。新しいオブジェクトがメモリ上に作成されるわけではありません。
これらの問題を完全に回避するために、私はしばしば自分自身を思い出させるために
copy
モジュールは、オブジェクトをメモリ内でコピーするように明示的に強制し、新しいオブジェクト上で呼び出されたメソッドがソースオブジェクトに適用されないようにします。私もあなたと同じ問題を抱えており、それを回避するために
deepcopy
関数を使用して回避しました。
あなたの場合、これで警告メッセージは解消されるはずです。
from copy import deepcopy
df = deepcopy(df_all.loc[df_all['issueid']==specific_id,:])
df['industry'] = 'yyy'
EDIT : 下のDavid M.さんの素晴らしいコメントもご覧ください!
df = df_all.loc[df_all['issueid']==specific_id,:].copy()
df['industry'] = 'yyy'
関連
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandasのカラム名のリネーム
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] Pandas DataFrameの行数を取得する方法は?
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] Pandas DataFrameの特定の列の値がNaNである行を削除する方法
-
[解決済み] Pandasシリーズ/DataFrame全体をプリティプリントする
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PandasでSettingWithCopyWarningに対処する方法
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Pythonでファイルの読み込みと上書きをする