2015-09-20 8 views
12

これは非常に基本的な質問ですが、私は答えを見つけることができないようです。列のすべての値をpandasデータフレームの新しい列にコピー

IはDFと呼ばれるこのようなデータフレームを有する:

A  B  C 
a.1 b.1 c.1 
a.2 b.2 c.2 
a.3 b.3 c.3 

そして私は列「B」「はB.2」の値を有するDFからすべての行を抽出します。私はこれらの結果をdf_2に割り当てます。

df_2 = df[df['B'] == 'b.2'] 

df_2は次のようになります。そして、

A  B  C 
a.2 b.2 c.2 

、私は 'D' という名前の新しい列に列 'B' のすべての値をコピーします。 df_2になる原因:

A  B  C  D 
a.2 b.2 c.2 b.2 

私はこのような割り当てプリフォームする場合:値はのコピーに設定されるようにしようとしている

df_2['D'] = df_2['B'] 

を私は次の警告を取得しますDataFrameからのスライス http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy


このようdf_2作成するときに、私はまたの.locを使用して試してみました:

ドキュメントの注意事項を参照してください

に代わりに[row_indexer、col_indexer] =値の.locを使用して をお試しください

df_2 = df.loc[df['B'] == 'b.2'] 

ただし、まだ警告が表示されます。

ご協力いただきまして誠にありがとうございます。

+0

'a.1'手段は何?それは文字列ですか? –

答えて

22

あなたは、単に新しい列、同様にBを割り当てることができます - 問題がスロー1の前の行にある

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([['a.1','b.1','c.1'],['a.2','b.2','c.2'],['a.3','b.3','c.3']],columns=['A','B','C']) 

In [3]: df 
Out[3]: 
    A B C 
0 a.1 b.1 c.1 
1 a.2 b.2 c.2 
2 a.3 b.3 c.3 

In [4]: df['D'] = df['B']     #<---What you want. 

In [5]: df 
Out[5]: 
    A B C D 
0 a.1 b.1 c.1 b.1 
1 a.2 b.2 c.2 b.2 
2 a.3 b.3 c.3 b.3 

In [6]: df.loc[0,'D'] = 'd.1' 

In [7]: df 
Out[7]: 
    A B C D 
0 a.1 b.1 c.1 d.1 
1 a.2 b.2 c.2 b.2 
2 a.3 b.3 c.3 b.3 
+0

あなたは 'df ['D'] = df ['B']を正しく使用しましたか?あなたはそれを得るべきではありません、他に何かしましたか? –

+3

ありがとうございます!私は得る: 値は、DataFrameからスライスのコピーに設定しようとしています。 お試しください。loc [row_indexer、col_indexer] = valueの代わりに ドキュメントの注意点を参照してください。http://pandas.pydata.org/pandas-docs/stand/indexing.html#indexing-view-versus-copy df [ D '] = df [' B '] 値を引き出して新しい列に割り当てると、各行を繰り返し処理する方が良いでしょうか?それともこれは問題ではないですか? –

+0

私が言ったように、あなたは 'df ['D'] = df ['B']'を使いましたか?他に何を使ったのですか? –

11

-

df['D'] = df['B'] 

例/デモ警告。 df_2を作成すると、データフレームのスライスのコピーが作成されます。代わりに、df_2を作成するときに.copy()を使用すると、後でその警告が表示されません。

df_2 = df[df['B'] == 'b.2'].copy() 
+0

それを修正しました!ありがとうございます –

+0

正確には.copy()はここで異なるのですか? –

+0

.copy()との違いは、元のオブジェクトのビューではなく新しいオブジェクトを返すことです。したがって、新しいオブジェクトを変更した場合、元のオブジェクトは変更されません。 – Alex

1

私は正しいアクセス方法は、インデックスを使用していると思わ:

df_2.loc[:,'D'] = df_2['B'] 
+1

"SettingWithCopyWarning"が呼び出されます。 –

関連する問題