pandasDataFrame列ヘッダーからリストを取得します

1071
natsuki_2002 2013-10-21 11:18.

pandasDataFrameから列ヘッダーのリストを取得したいと思います。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']

18 answers

1719
Simeon Visser 2013-10-21 11:23.

次の手順を実行すると、値をリストとして取得できます。

list(my_dataframe.columns.values)

また、単純に使用することもできます:( Ed Chumの回答に示されているように):

list(my_dataframe)
424
EdChum 2013-10-21 12:25.

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

my_dataframe.columns.values.tolist()

.columnsインデックスを.columns.values返し、配列を返します。これには.tolist、リストを返すヘルパー関数があります。

パフォーマンスがそれほど重要でない場合、Indexオブジェクトは.tolist()直接呼び出すことができるメソッドを定義します。

my_dataframe.columns.tolist()

パフォーマンスの違いは明らかです。

%timeit df.columns.tolist()
16.7 µs ± 317 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit df.columns.values.tolist()
1.24 µs ± 12.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

タイピングを憎む人のために、あなただけ呼び出すことができますlist上のdfように、:

list(df)
94
tegan 2014-12-02 10:31.

いくつかの簡単なテストを行いましたが、おそらく当然のことながら、を使用した組み込みバージョン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に感謝します!)

53
fixxxer 2015-04-08 04:50.

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

df.columns.tolist()

素敵なリストの列名が表示されます。

39
Alexander 2015-05-29 05:58.
>>> list(my_dataframe)
['y', 'gdp', 'cap']

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

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

ちなみに、以下を使用するだけでソート済みリストを取得できますsorted

>>> sorted(my_dataframe)
['cap', 'gdp', 'y']
35
cs95 2019-04-03 23:18.

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

拡張反復可能アンパック(python3.5 +):[*df]およびFriends

解凍の一般化(PEP 448)Python3.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 

あなたが欲しいならlist...。

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

または、必要に応じてset

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

または、必要に応じてtuple

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

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

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

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

PS:パフォーマンスが重要な場合は、上記のソリューションを捨てて、

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

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

ビジュアルチェック
これは他の回答で説明されているので、反復可能なアンパックを利用できます(明示的なループは必要ありません)。

print(*df)
A B C

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

他の方法の批評

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

次に、を使用sorted(df) しても、列の元の順序保持されません。そのためには、list(df)代わりに使用する必要があります。

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

最後に、listificationlist(df)は、拡張アンパックが利用できないpython <= 3.4の前述の方法の簡潔な代替手段としてのみ使用する必要があります。

25
BrenBarn 2013-10-21 11:20.

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

19
Anton Protopopov 2015-12-05 11:41.

面白いですが、それdf.columns.values.tolist()よりもほぼ3倍高速ですdf.columns.tolist()が、同じだと思いました。

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
19
Sascha Gottfried 2014-01-24 07:23.

Aデータフレームは、辞書のようなオブジェクトの「キー」を反復処理の規則に従います。

my_dataframe.keys()

キー/列のリストを作成します-オブジェクトメソッドto_list()とPythonの方法

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)
14
firelynx 2016-03-30 21:19.

ノートブックで

IPythonノートブックでのデータ探索の場合、私の好ましい方法は次のとおりです。

sorted(df)

これにより、読みやすいアルファベット順のリストが作成されます。

コードリポジトリ内

コードでは、より明確に行うことがわかります

df.columns

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

10
rohit singh 2019-04-16 20:32.
%%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)
3
Vivek 2018-02-17 08:36.

SimeonVisserが答えたように...あなたはできる

list(my_dataframe.columns.values) 

または

list(my_dataframe) # for less typing.

しかし、私は最もスイートスポットは次のとおりだと思います。

list(my_dataframe.columns)

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

3
Joseph True 2018-08-23 06:17.

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

for col in df.columns:
    print col
3
Harikrishna 2018-08-23 10:23.

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

list(my_dataframe.columns)

tolist()と呼ばれる別の関数も使用できます。

my_dataframe.columns.tolist()
2
StefanK 2017-12-14 04:47.

質問は追加の説明に値すると思います。

@fixxxerが指摘したように、答えはプロジェクトで使用しているパンダのバージョンによって異なります。pd.__version__コマンドで取得できます。

私のように(debian jessieでは0.14.1を使用しています)何らかの理由で0.16.0より古いバージョンのパンダを使用している場合は、次を使用する必要があります。

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

このキー方式の利点は、新しいバージョンのパンダでも機能するため、より普遍的であるということです。

1
user21988 2013-10-21 11:43.
n = []
for i in my_dataframe.columns:
    n.append(i)
print n
0
Igor Jakovljevic 2019-02-15 00:58.

上で提供された解決策は素晴らしいですが。また、frame.column_names()のようなものがパンダの関数であると期待しますが、そうではないので、次の構文を使用するとよいでしょう。「tolist」関数を呼び出すことで、パンダを適切な方法で使用しているという感覚を何とか維持します。frame.columns.tolist()

frame.columns.tolist() 
0
totalhack 2020-01-16 19:24.

DataFrameにIndexまたはMultiIndexがあり、それらも列名として含めたい場合:

names = list(filter(None, df.index.names + df.columns.values.tolist()))

このような単純な操作でパフォーマンスに不必要な影響を与えるreset_index()の呼び出しを回避します。

データフレームインデックスがプライマリ/一意キーにマップされているデータベースからデータをシャトルしているため、これがより頻繁に必要になりますが、実際には私にとっては別の「列」にすぎません。パンダがこのようなもののための組み込みのメソッドを持っていることはおそらく理にかなっているでしょう(私はそれを見逃した可能性があります)。

Related questions

MORE COOL STUFF

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする&nbsp;

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

Total War:Warhammer:Kotakuレビュー

Total War:Warhammer:Kotakuレビュー

私はこのゲームを嫌う準備ができていました。先週の前に、Total War:Warhammerについての私の考えがありました:それでもここに私は、私の手にある完成品であり、私は変わった男です。

涙の道:軍事化された帝国主義勢力がスタンディングロックキャンプを占領

涙の道:軍事化された帝国主義勢力がスタンディングロックキャンプを占領

スタンディングロックスー族のメンバーと水の保護者は、ノースダコタ州のスタンディングロックにあるオセティサコウィンキャンプを去ります。(Twitter経由のCNNスクリーンショット)火と煙がスカイラインを覆い、スタンディングロックスー族のメンバーと水の保護者が、聖なるものを守りながら建てた家、オセティサコウィン(セブンカウンシルファイアーズ)キャンプから行進し、太鼓を打ち、歌い、祈りました。ダコタアクセスパイプラインとしても知られる「ブラックスネーク」からの土地。

シアーズとKマートはイヴァンカ・トランプの商品を自分たちで取り除いています

シアーズとKマートはイヴァンカ・トランプの商品を自分たちで取り除いています

写真:APシアーズとKマートは、イヴァンカ・トランプのトランプホームアイテムのコレクションも、誰も購入したくないために削除しました。シアーズとKマートの両方の親会社であるシアーズホールディングスは、土曜日のABCニュースへの声明で、彼らが気にかけていると辛抱強く説明しましたトランプラインを売り続けるにはお金を稼ぐことについてあまりにも多く。

ポテトチップスでたった10分でスペインのトルティーヤを作る

ポテトチップスでたった10分でスペインのトルティーヤを作る

伝統的なスペインのトルティーヤは通常、オリーブオイルで柔らかくなるまで調理されたポテトから始まります(30分以上かかる場合があります)が、ケトルで調理されたポテトチップスの助けを借りてわずか10分でテーブルに置くことができます。上のビデオはすべてがバラバラにならないように裏返す方法を含め、レシピ全体を説明しますが、必要なのは4〜5個の卵と3カップのケトルチップスだけです。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

ホームオフィスのセットアップ術を極めよう!AppExert の開発者は、家族全員が一緒にいる場合でも、在宅勤務の技術を習得しています。祖父や曽祖父が共同家族で暮らしていた頃の記憶がよみがえりました。

2022 年、私たちのデジタル ライフはどこで終わり、「リアル ライフ」はどこから始まるのでしょうか?

20 年前のタイムトラベラーでさえ、日常生活におけるデジタルおよびインターネットベースのサービスの重要性に驚くことでしょう。MySpace、eBay、Napster などのプラットフォームは、高速化に焦点を合わせた世界がどのようなものになるかを示してくれました。

ニューロマーケティングの秘密科学

ニューロマーケティングの秘密科学

マーケティング担当者が人間の欲望を操作するために使用する、最先端の (気味が悪いと言う人もいます) メソッドを探ります。カートをいっぱいにして 3 桁の領収書を持って店を出る前に、ほんの数点の商品を買いに行ったことはありませんか? あなたは一人じゃない。

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

私たちが住んでいる世界を確実に理解するには、データが必要です。ただし、空間参照がない場合、このデータは地理的コンテキストがないと役に立たなくなる可能性があります。

Language