2014-01-22 4 views
48

그래서 열 이름이있는 데이터 프레임이 있는데 특정 문자열이 포함되어 있지만 정확히 일치하지 않는 데이터 프레임을 찾고 싶습니다. 'spike-2', 'hey spike', 'spiked-in'과 같은 열 이름에서 'spike'을 찾고 있습니다 ('spike' 부분은 항상 연속입니다).팬더 : 특정 문자열이 포함 된 열을 찾습니다.

열 이름을 문자열 또는 변수로 반환해야하므로 나중에도 df['name'] 또는 df[name]으로 열에 액세스합니다. 나는 이것을 할 수있는 방법을 찾으려고 노력했지만 아무 소용이 없다. 어떤 팁?

답변

84

그냥 DataFrame.columns 반복 , 지금 이것은 당신이 일치하는 열 이름의 목록이 끝날하는 예입니다

import pandas as pd 

data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]} 
df = pd.DataFrame(data) 

spike_cols = [col for col in df.columns if 'spike' in col] 
print(list(df.columns)) 
print(spike_cols) 

출력 :

['hey spke', 'no', 'spike-2', 'spiked-in'] 
['spike-2', 'spiked-in'] 

설명 :

  1. df.columns은 열 이름 목록을 반환합니다.
  2. [col for col in df.columns if 'spike' in col]col 변수를 사용하여 목록 df.columns을 반복하고 col'spike'이 포함 된 경우 결과 목록에 추가합니다. 이 구문은 list comprehension입니다.

만이 할 수있는 일치하는 열이 설정 결과 데이터하려면 다음

df2 = df.filter(regex='spike') 
print(df2) 

출력 :

spike-2 spiked-in 
0  1   7 
1  2   8 
2  3   9 
+0

굉 즉! 나는 그것이 어떻게 작동하는지 정확히 이해하지 못한다.하지만 여전히 파이썬과 팬더 모두에게 새로운 것이다. 아마 설명해 주시겠습니까? – Sajber

+8

이것은''DataFrame.filter''가 참고로하는 것입니다 (그리고 원할 경우 정규 표현식을 제공 할 수 있습니다) – Jeff

+0

설명 주셔서 감사합니다! – Sajber

15

This answer이 작업을 수행하기 위해 DataFrame.filter 방법을 사용을 목록 이해없이 :

import pandas as pd 

data = {'spike-2': [1,2,3], 'hey spke': [4,5,6]} 
df = pd.DataFrame(data) 

print(df.filter(like='spike').columns) 

'spike-2'만 출력됩니다.

print(df.filter(regex='spike|spke').columns) 

윌 출력 모두 열 : 어떤 사람들은 위의 의견 제안 또한, 정규 표현식을 사용할 수 있습니다 [ '스파이크 2', '헤이 spke']

4

또한 df.columns을 [사용 df.columns.str.contains는 (확실 = '스파이크')]

data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]} 
df = pd.DataFrame(data) 

colNames = df.columns[df.columns.str.contains(pat = 'spike')] 

print(colNames) 

이 출력 할 것이다 열 이름 '스파이크 -2', u'spiked 인 '

관련 문제