4列のパンダDataFrameがあり、 new DataFrameを作成したいと考えています。 only には3列あります。この質問は次のようなものです。 データフレームから特定の列を抽出する しかしRではなくpandasのために。
import pandas as pd
old = pd.DataFrame({'A' : [4,5], 'B' : [10,20], 'C' : [100,50], 'D' : [-30,-50]})
new = pd.DataFrame(Zip(old.A, old.C, old.D)) # raises TypeError: data argument can't be an iterator
それをするためのパンダ的な方法は何ですか?
これを行う方法があり、それは実際にはRに似ています
new = old[['A', 'C', 'D']].copy()
ここでは、元のデータフレームから必要な列を選択し、それらの変数を作成しています。まったく新しいデータフレームを変更したい場合は、おそらくSettingWithCopyWarning
を避けるために.copy()
を使用したいでしょう。
別の方法はデフォルトでコピーを作成するfilter
を使うことです:
new = old.filter(['A','B','D'], axis=1)
最後に、元のデータフレームの列数によっては、これをdrop
を使用して表現するほうが簡潔な場合があります(これにより、デフォルトでコピーも作成されます)。
new = old.drop('B', axis=1)
最も簡単な方法は
new = old[['A','C','D']]
。
一般的な機能形式
def select_columns(data_frame, column_names):
new_frame = data_frame.loc[:, column_names]
return new_frame
上記の問題に固有のもの
selected_columns = ['A', 'C', 'D']
new = select_columns(old, selected_columns)
もう1つの簡単な方法は、
new = pd.DataFrame([old.A、old.B、old.C])。transpose()
old.column_nameはあなたにシリーズを与えるでしょう。保持したいすべての列系列のリストを作成し、それをDataFrameコンストラクターに渡します。形状を調整するために転置をする必要があります。
In [14]:pd.DataFrame([old.A,old.B,old.C]).transpose()
Out[14]:
A B C
0 4 10 100
1 5 20 50
私が知る限り、フィルター関数を使用するときに必ずしも軸を指定する必要はありません。
new = old.filter(['A','B','D'])
と同じデータフレームを返します
new = old.filter(['A','B','D'], axis=1)