팬더 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)
입력을 미워하는 사람들을 위해, 당신은 단지 호출 할 수 있습니다 list
에 df
이렇게 같이 :
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
.