2016-12-23 4 views
1

특정 "TYPE"단어를 시작하고 _1을 포함하지 않는 열을 삭제 하시겠습니까?조건에 따라 열을 삭제하는 방법

df = 

TYPE_1 TYPE_2 TYPE_3 COL1 
aaa  asb  bbb  123 

결과는 같아야합니다

df = 

    TYPE_1 COL1 
    aaa  123 

은 현재 내가 수동으로 열을 삭제하고, 그러나이 방법은 매우 효율적이지 열 수가 큰 경우 :

df = df.drop(["TYPE_2","TYPE_3"], axis=1) 
+0

가능한 복제 (https://stackoverflow.com/q/28538536/1278112) –

답변

3

목록을 이해할 수 있습니다. 참고 : 축 = 1은 우리가 열을 참조한다는 것을 나타내고 inplace=Truepandas.DataFrame.drop 워드 프로세서로도 사용될 수 있습니다.

droplist = [i for i in df.columns if i.startswith('TYPE') and '_1' not in i] 
df1.drop(droplist,axis=1,inplace=True) 
+0

어떤 이유로 열 이름이없는 열에는 작동하지 않습니다. 'TYPE_MOD'. 따라서 '_'을 포함하는 열은 무시됩니다. 왜? – Dinosaurius

+0

방금 ​​테스트 한 결과 'TYPE_MOD'라는 열이 삭제되었습니다. 'TYPE_MOD'문자열에 공백이있을 수 있습니까? 'df.columns [df.columns == 'TYPE_MOD']' – ade1e

2

쉬운 :

unwanted = [column for column in df.columns 
      if column.startswith("TYPE") and "_1" not in column] 
df = df.drop(unwanted) 
1
t_cols = [c for c in df.columns.values if c.startswith('TYPE_') and not c == 'TYPE_1'] 
df.drop(t_cols) 

해야 할 일

+0

영업 이익은하지 "_1로 끝나는" "_1를 포함하지 않습니다"라고. – DyZ

3

이 다섯 번째 대답하지만 난 정규식 열 이름으로 필터링하는 filter dataframe 방법의 힘을 소개하고 싶었다. TYPE으로 시작하지 않거나 그 안에 어딘가에 _1이있는 열을 검색합니다. [팬더에서 여러 열을 삭제]의

df.filter(regex='^(?!TYPE)|_1') 
+0

을 입력하면 무엇을 얻을 수 있습니까?이 정규식을 분해 할 수 있습니까? 감사. – julieth

+1

정규식은 두 부분을'|'로 구분합니다. 첫 번째 부분은'^ (?! TYPE)'로 [negative look-ahead]입니다 (http://stackoverflow.com/questions/899422/regular-expression-for-a-string-that-does-not-start). -with-a-sequence)는 TYPE으로 시작하지 않는 표현식을 찾는 데 사용됩니다. 두 번째 부분은 단순히'_1'과 일치하는 것을 찾고 있습니다. –

관련 문제