代码之家  ›  专栏  ›  技术社区  ›  Annalix

通过在列上迭代搜索元素pandas

  •  1
  • Annalix  · 技术社区  · 6 年前

    在我的数据框中,我需要删除包含特定字符的列。为了搜索那些列,我试图用python编写一个for循环,循环遍历每一列,如果找到一个带有不需要的字符的列,则必须将该列删除。 我的数据框显示为这样,我需要删除col3和col5,它们有“f”和“t”

    col1  col2  col3 col4 col5 col6
    1245  pink  f    Mar  f    f
    245   green f    Feb  t    f
    1237  grey  t    Apr  f    f
    267   black f    Sep  t    f
    

    我想写一个类似的剧本

    for col in df.items():
           if df[col] == 'f'
           df = df.drop([col], axis=1) 
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Joe    6 年前

    可以创建仅包含 f 然后将遮罩应用到df:

    mask = ((df == 'f') | (df=='t')).all(0)
    df = df[df.columns[~mask]]
    

    如果你想离开第6栏,你可以这样做:

    mask0 = ((df == 'f') | (df == 't')).all(0)
    mask1 = (df == 'f').all(0)
    df0 = df[df.columns[~mask0]] 
    df1 = df[df.columns[mask1]]
    df = pd.concat([df0, df1], axis=1)
    
        2
  •  1
  •   RomanPerekhrest    6 年前

    pd.DataFrame.loc pd.DataFrame.any 功能:

    In [196]: df
    Out[196]: 
       col1   col2 col3 col4 col5
    0  1245   pink    t  Mar    f
    1   245  green    f  Feb    t
    2  1237   grey    f  Apr    f
    3   267  black    f  Sep    f
    4   111    red    t  Aug    t
    
    In [197]: df.loc[:, ~((df == 'f') | (df == 't')).any(axis=0)]
    Out[197]: 
       col1   col2 col4
    0  1245   pink  Mar
    1   245  green  Feb
    2  1237   grey  Apr
    3   267  black  Sep
    4   111    red  Aug