質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1393閲覧

pandasでコピーではなく参照渡しをするには

shiri

総合スコア12

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2023/03/13 13:20

以下のようなデータがあったとして、

import pandas as pd data1 = ["d1","d2","d3"] data2 = ["D1","D2","D3"] data3 = ["d1","D2","D3"] data4 = ["D4","D2","D3"] df = pd.DataFrame(data=[data1,data2,data3,data4],index=["行1","行2","行3","行4"], columns=["列1","列2","列3"]) data5 = ["d3","d2","d3"] data6 = ["D1","D2","D3"] data7 = ["d3","D2","D3"] data8 = ["D4","D2","D3"] df2 = pd.DataFrame(data=[data5,data6,data7,data8],index=["行1","行2","行3","行4"],columns=["列1","列2","列3"])

次の動作をさせます。dfとdf2の列1のアンドを取ったdfをdf3に渡す
df3 = df[df["列1"]==df2["列1"]] # (※1)

df3の要素を書き換えます
df3.at["行2","列1"] = "HOGE"

期待しているのはdf3のみならず、元のdfのテーブルも書き換わっていることですが
(※1)でdf3が参照ではなくコピーされており、dfとdf3が別物として扱われてしまいます
このような場合(意図的に参照渡しをさせたい)、どのようにすればよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bsdfan

2023/03/14 00:12

boolean indexではコピーされたデータフレームが作られるので、書かれているようなことを、そのまま実現するのは不可能だと思います。 なぜこういうことをやりたいかとか、実際にやりたいのはどういうことかなどを書くと、他の方法の回答が得られるかもしれません。
guest

回答1

0

ベストアンサー

df3 = df という記述をした場合にのみ、df3は参照渡しになります。
dfに何か操作をした時点でdfとは違うDataFrameと認識されるので、参照はできません。

df3は絶対作らないといけないのですか?
dfを書き換えたいだけなら、例えば下記のようにすればいいと思います。

python

1df.loc[df["列1"]==df2["列1"],"列1"] = "hoge"

投稿2023/03/14 05:21

to212mo

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiri

2023/03/14 10:45

ご回答ありがとうございます 出来ないということで理解いたしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問