web-dev-qa-db-ja.com

パンダのDataFrame列ヘッダからリストを取得する

パンダDataFrameから列ヘッダのリストを取得したいのですが。 DataFrameはユーザーの入力から取得されるので、列の数やそれらが呼び出される列がわかりません。

例えば、私がこのようなDataFrameを与えられたら:

>>> my_dataframe
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7
5   4    8    3
6   8    2    8
7   9    9   10
8   6    6    4
9  10   10    7

以下のようなリストを入手したいです。

>>> header_list
[y, gdp, cap]
711
natsuki_2002

次のようにして値をリストとして取得できます。

list(my_dataframe.columns.values)

また、あなたは単に使用することができます:

list(my_dataframe)
1256
Simeon Visser

最もパフォーマンスの高い組み込みメソッドがあります。

my_dataframe.columns.values.tolist()

.columnsIndexを返し、.columns.valuesarrayを返し、これにはlistを返すためのヘルパー関数があります。

_編集_

入力が嫌いな人にとっては、おそらくこれが最短の方法です。

list(df)
304
EdChum

簡単なテストをいくつか行いましたが、おそらく驚くことではありませんが、dataframe.columns.values.tolist()を使った組み込みバージョンが最速です。

In [1]: %timeit [column for column in df]
1000 loops, best of 3: 81.6 µs per loop

In [2]: %timeit df.columns.values.tolist()
10000 loops, best of 3: 16.1 µs per loop

In [3]: %timeit list(df)
10000 loops, best of 3: 44.9 µs per loop

In [4]: % timeit list(df.columns.values)
10000 loops, best of 3: 38.4 µs per loop

(私はまだlist(dataframe)をとても気に入っています。だからEdChumに感謝します!)

75
tegan

それはさらに簡単になります(パンダ0.16.0) 

df.columns.tolist()

niceリストのカラム名を教えてくれます。

39
fixxxer
>>> list(my_dataframe)
['y', 'gdp', 'cap']

デバッガモードでデータフレームの列を一覧表示するには、リスト内包表記を使用します。

>>> [c for c in my_dataframe]
['y', 'gdp', 'cap']

ちなみに、sortedを使うだけでソート済みリストを得ることができます。

>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
30
Alexander

それはmy_dataframe.columnsとして利用可能です。

22
BrenBarn

面白いですが、df.columns.values.tolist()df.columns.tolist()の約3倍速いですが、私はそれらが同じであると思いました:

In [97]: %timeit df.columns.values.tolist()
100000 loops, best of 3: 2.97 µs per loop

In [98]: %timeit df.columns.tolist()
10000 loops, best of 3: 9.67 µs per loop
15

DataFrame は、オブジェクトの「キー」を反復処理するという辞書形式の規則に従います。

my_dataframe.keys()

キー/カラムのリストを作る - オブジェクトメソッドto_list()とPythonic way

my_dataframe.keys().to_list()
list(my_dataframe.keys())

基本的な繰り返し DataFrameに対して/は列ラベルを返す

[column for column in my_dataframe]

列ラベルを取得するためだけに、DataFrameをリストに変換しないでください。便利なコードサンプルを探している間、考えるのをやめないでください。

xlarge = pd.DataFrame(np.arange(100000000).reshape(10000,10000))
list(xlarge) #compute time and memory consumption depend on dataframe size - O(N)
list(xlarge.keys()) #constant time operation - O(1)
11

ノートブックで

IPythonノートブックでのデータ探索のために、私が好む方法はこれです:

sorted(df)

これは読みやすいアルファベット順のリストを生成します。

コードリポジトリ内

コードでは、実行するほうがより明示的です。

df.columns

それは他の人があなたがしていることをあなたのコードを読んでいることに伝えるからです。

10
firelynx

驚いたことに、これまでにこの投稿を見たことがないので、ここに置いておきます。

拡張反復開梱(python3.5 +):[*df]と仲間たち

開梱一般化(PEP 448) はPython 3.5で導入されました。そのため、以下の操作がすべて可能です。

df = pd.DataFrame('x', columns=['A', 'B', 'C'], index=range(5))
df

   A  B  C
0  x  x  x
1  x  x  x
2  x  x  x
3  x  x  x
4  x  x  x 

listnameが必要な場合は__....

[*df]
# ['A', 'B', 'C']

setname__が欲しい場合は、

{*df}
# {'A', 'B', 'C'}

Tuplename__が欲しい場合は、

*df,  # Please note the trailing comma
# ('A', 'B', 'C')

あるいは、結果をどこかに保存したい場合は、

*cols, = df  # A wild comma appears, again
cols
# ['A', 'B', 'C']

...あなたがコーヒーをタイピング音に変換するような人なら、これはあなたのコーヒーをより効率的に消費することになります;)

P。。パフォーマンスが重要な場合は、上記の解決策を捨ててください。

df.columns.to_numpy().tolist()
# ['A', 'B', 'C']

これは Ed Chum's answer に似ていますが、.to_numpy().valuesの使用よりも優先されるv0.24用に更新されています。詳細については、 この回答 (私による)を参照してください。

目視チェック
これについては他の答えで説明したので、繰り返し可能な解凍を利用できます(明示的なループは不要です)。

print(*df)
A B C

print(*df, sep='\n')
A
B
C

他の方法に対する批判

単一行で実行できる操作には明示的なforname__ループを使用しないでください(リスト内包表記は問題ありません)。

次に、sorted(df) を使用しても、列の元の順序 は保持されません。そのためには、代わりにlist(df)を使うべきです。

次に、list(df.columns)list(df.columns.values)は悪い提案です(現在のバージョン、v0.24現在)。 Indexname__(df.columnsから返される)とNumPy配列(df.columns.valuesによって返される)の両方とも、より速くより慣用的な.tolist()メソッドを定義します。

最後に、説明、すなわちlist(df)は前述の方法の簡潔な代替としてのみ使用されるべきです。

5
cs95

simeon Visserが回答したとおり...

list(my_dataframe.columns.values) 

または 

list(my_dataframe) # for less typing.

しかし、私はほとんどのスイートスポットは次のように考えています。

list(my_dataframe.columns)

それは明白であり、同時に不必要に長くはありません。

4
Vivek

これにより、リスト内の列の名前がわかります。

list(my_dataframe.columns)

Tolist()という別の関数も使用できます。

my_dataframe.columns.tolist()
4
Harikrishna

迅速で、きちんとした、視覚的なチェックのために、これを試してください:

for col in df.columns:
    print col
2
Joseph True
n = []
for i in my_dataframe.columns:
    n.append(i)
print n
2
user21988

私は質問がさらなる説明に値すると感じます。

@fixxxerが述べたように、答えはあなたがあなたのプロジェクトで使用しているパンダバージョンに依存します。どれがpd.__version__コマンドで得られます。

私のような何らかの理由で(私は0.14.1を使っているDebian jessieでは)0.16.0より古いバージョンのパンダを使っているのであれば、それを使う必要があります:

まだ実装されているdf.columnsメソッドがないため、df.keys().tolist()

このキー方式の利点は、パンダの新しいバージョンでも機能するということです。

2
StefanK
%%timeit
final_df.columns.values.tolist()
948 ns ± 19.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
list(final_df.columns)
14.2 µs ± 79.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.columns.values)
1.88 µs ± 11.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
final_df.columns.tolist()
12.3 µs ± 27.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
list(final_df.head(1).columns)
163 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
2
rohit singh

上で提供された解決策はいいですが。また、私はframe.column_names()のようなものがパンダの中の関数であると期待するでしょう、しかしそうではないので、多分それは以下の構文を使うのはいいでしょう。それはどういうわけかあなたが "tolist"関数を呼び出すことによってあなたが適切な方法でパンダを使っているという感覚を保存します:frame.columns.tolist() 

frame.columns.tolist() 
0

このソリューションは、オブジェクトmy_dataframeのすべての列をリストします。

print(list(my_dataframe))
0
Sunitha G