定数値でデータフレームに列を追加する


187

すべての行に同じ値が含まれる列を追加する必要がある既存のデータフレームがあります。

既存のdf:

Date, Open, High, Low, Close
01-01-2015, 565, 600, 400, 450

新しいdf:

Name, Date, Open, High, Low, Close
abc, 01-01-2015, 565, 600, 400, 450

既存のシリーズ/データフレーム列を追加する方法を知っています。ただし、これは別の状況です。必要なのは、「名前」列を追加し、すべての行を同じ値(この場合は「abc」)に設定することだけです。

回答:


295

df['Name']='abc' 新しい列を追加し、すべての行をその値に設定します。

In [79]:

df
Out[79]:
         Date, Open, High,  Low,  Close
0  01-01-2015,  565,  600,  400,    450
In [80]:

df['Name'] = 'abc'
df
Out[80]:
         Date, Open, High,  Low,  Close Name
0  01-01-2015,  565,  600,  400,    450  abc

35
これを行う他の方法はありますか?次の警告が表示されます。DataFrameからのスライスのコピーに値を設定しようとしています。代わりに.loc [row_indexer、col_indexer] = valueを使用してみてください。ドキュメントの注意事項を参照してください:pandas.pydata.org/pandas-docs/stable/...
ヴィシュヌviswanath

3
つまり、元のdfではなくコピーであるものに割り当てているということです。質問の形式でデータとコードを確認しないと、これ以上コメントできません。コメントで質問に答えることは逆効果です。このコードは機能し、これより前に警告を出すために何かをしました
EdChum

@vishnuviswanath Jupyter Notebookを使用すると、まったく同じ警告が表示されます。自明ではないDataFrameサイズ(> 200レコード)と特定の割り当ての組み合わせがあり、単純にdfを出力すると、それが起こります。
ビル

4
@vishnuviswanathあなたはおそらくこれより前に元のデータフレームのスライスを作成し、そのスライスに新しい列を設定しようとしています。代わりに新しい列を元のデータフレームに追加し、その後スライスを作成します。おそらくデータフレームのスライスを作成するとき、パンダはコピーを作成せず、元のデータフレームからなんとかしてそれを管理します。この種のことは、その最適化を台無しにしており、それゆえ警告です。
amit_saxena 2018

2
上記のパンダ警告を回避するには、これを使用.copy()する前に、を使用してデータフレームのコピーを取得します(巨大であるか、パフォーマンスやパフォーマンスが本当に重要でない限り)。
matanster 2018

61

を使用insertして、新しい列の位置を指定できます。この場合、0新しい列を左側に配置するために使用します。

df.insert(0, 'Name', 'abc')

  Name        Date  Open  High  Low  Close
0  abc  01-01-2015   565   600  400    450

これは私にはうまくいきません。私の元のマトリックスは1460 x 41で、1の列を前に追加しようとしていますdf.insert(0,'coef_fix',1)。私はPython 3.0でJupyterLabを使用しています
ColinMac 2018

2
私にとってはうまくいきます。insert動作していることに気づかなかったかもしれませんinplace。つまり、新しいデータフレームの値は返されませんが、元のデータフレームは変更されています。これを試してくださいdf = pd.DataFrame(0, range(1460), range(41)); df.insert(0, 'coef_fix', 1); df
piRSquared

44

シングルライナー作品

df['Name'] = 'abc'

Name列を作成し、すべての行をabc値に設定します


41

他の人が提案したことを要約し、3番目の方法を追加する

あなたはできる:

  • 割り当て(** kwargs)

    df.assign(Name='abc')
  • 新しい列シリーズ(作成されます)にアクセスして設定します。

    df['Name'] = 'abc'
  • 挿入(loc、column、value、allow_duplicates = False)

    df.insert(0, 'Name', 'abc')

    引数loc(0 <= loc <= len(columns))では、必要な場所に列を挿入できます。

    「LOC」は、あなたの列がそのインデックス与えになります挿入後に。たとえば、上記のコードは列Nameを0番目の列として挿入します。つまり、最初の列のに挿入され、新しい最初の列になります。(インデックスは0から始まります)。

これらすべてのメソッドを使用して、シリーズから新しい列を追加することもできます(上記の「abc」デフォルト引数をシリーズで置き換えるだけです)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.