[python] pandas 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']



답변

다음을 수행하여 값을 목록으로 얻을 수 있습니다.

list(my_dataframe.columns.values)

또한 간단하게 사용할 수 있습니다 : ( Ed Chum의 답변에 표시된 것처럼 ) :

list(my_dataframe)


답변

가장 성능이 좋은 내장 메소드가 있습니다.

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)

입력을 미워하는 사람들을 위해, 당신은 단지 호출 할 수 있습니다 listdf이렇게 같이 :

list(df)


답변

몇 가지 빠른 테스트를 수행했으며 놀랍게도 내장 버전 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에게 감사드립니다!)


답변

그것의 더 간단 해집니다 (팬더 0.16.0으로) :

df.columns.tolist()

멋진 목록의 열 이름을 제공합니다.


답변

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

디버거 모드에서 데이터 프레임의 열을 나열하려면 목록 이해를 사용하십시오.

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

그건 그렇고, 간단히 다음을 사용하여 정렬 된 목록을 얻을 수 있습니다 sorted.

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


답변

나는 지금 까지이 게시물을 보지 못 했으므로 여기에 남겨 두겠습니다.

확장 가능한 반복적 압축 풀기 (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 

당신이 원한다면 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']

… 커피를 타이핑 소리로 변환하는 사람이라면 커피를보다 효율적으로 소비합니다.)

추신 : 성능이 중요하다면 위의 솔루션을 선호하여 위의 솔루션을 제거하고 싶을 것입니다

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

이 유사하다 에드 미끼의 대답 하지만 v0.24 업데이트 .to_numpy()를 사용하는 것이 바람직하다 .values. 자세한 내용은
이 답변 을 참조하십시오.

육안 검사
다른 답변에서 논의 된 것을 보았으므로 반복 가능한 포장 풀기를 사용할 수 있습니다 (명시 적 루프 필요 없음).

print(*df)
A B C

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

다른 방법의 비판

for한 줄로 수행 할 수있는 작업에 명시 적 루프를 사용하지 마십시오 (목록 이해는 괜찮습니다).

다음을 사용 하면 열의 sorted(df) 원래 순서유지되지 않습니다 . 이를 위해서는 list(df)대신 사용해야 합니다.

다음으로, list(df.columns)그리고 list(df.columns.values)(현재 버전의 같은, v0.24) 나쁨 제안합니다. 두 Index(에서 반환 df.columns) 및 (에 의해 반환 NumPy와 어레이 df.columns.values)를 정의 .tolist()더 빠르고 더 관용적 인 방법.

마지막으로, 목록 화, 즉 list(df)확장 언 패킹이 불가능한 python <= 3.4에 대한 앞서 언급 한 방법에 대한 간결한 대안으로 만 사용해야합니다.


답변

로 사용할 수 있습니다 my_dataframe.columns.