2017-12-21 16 views
1

Iは、パンダのデータフレームを使用しています:1Dリストに1列のみとパンダのデータフレームを変換

import pandas as pd 
a = [1,2,3] 
i = [5,2,3] 
df = pd.DataFrame({ "foo" : i, "bar" : a }) 
df = df.set_index("foo") 
l = df.values.tolist() 
# l = [[1], [2], [3]] 

これは、L = [1,2,3]のような迷惑なI'wあります。なぜリストのリストを取得するのですか?どうすればリストを取得できますか?

+1

これは嘘です。値を指定してravelまたはflattenを使用してください。 – Dark

+1

@Dark問題は、いくつかのチェックコードを実装しない限り(例えば、カラム数をチェックしない限り)、いつ絞り込みを呼び出すかわからないことがあります。さもなければ、データフレームを一貫して扱う 'df.squeeze'という関数があります。 –

+0

私は自分の携帯電話にいました。新しいことを学んだけれど。 – Dark

答えて

4

はv0.20で導入された素敵な小さなユーティリティ機能、df.squeezeだ -

df.squeeze() 

foo 
5 1 
2 2 
3 3 
Name: bar, dtype: int64 

df.squeeze().tolist() 
[1, 2, 3] 

データフレームは1列のみを持っている場合は、それを直列に降格されます。それ以外の場合は何も起こりません。

df 
    bar baz 
foo   
5  1 4 
2  2 5 
3  3 6 

df.squeeze() 

    bar baz 
foo   
5  1 4 
2  2 5 
3  3 6 

この機能の利点は、あなたが安全に所望の出力を返すように形状上の任意の追加のコードのチェックを実装しなくても、その出力に.tolist()を呼び出すことができます。

+0

ニース;これは私が探していたものです。このデータフレームはコードに多くの広がりを持ち、次元が本当に迷惑であるかどうかを毎回チェックします。ありがとう –

2

だけ

In [4]: df["bar"].tolist() 
Out[4]: [1, 2, 3] 

df["bar"]Seriesを作成し、それが.tolist()メソッドを持つ列を指定します。ここで

+0

私はそれを知っていることを確かめるが、私は1つだけの列を持って、もう1つはインデックスが宣言されています。私はこれがデータフレーム1の列になり、tolistメソッドが私に単純なリストを与えると考えていました。 –

関連する問題