首页 > 解决方案 > 我无法尝试使用包含列名称的列表从数据框中选择列

问题描述

我正在尝试按列名称选择特定列到 Dataframe。我使用一个列表来指定我要选择的列的名称。但它不断返回此错误。

KeyError: "None of [Index(['(',')', ' (',')', ' (',')',\n       ' (r,')', ' (',')', ' ')',\n       ' (',')', ' ('')', ' ('')',\n       ' ('')', ' (',')',\n       ' (',')', ' (' ')',\n       ' (',')', ' ('')',\n       ' ('')', ' (',')'],\n      dtype='object')] are in the [columns]"

我使用下面的代码来执行此操作:

def SelectColumn(df,liste):


  return pd.concat([df[e] for e in liste], axis=1)

DataFrame 的形状有点乱,但重要的是列的名称。

因此,一旦我导入 csv 文件,我 将以 #Leftover开头的 ligne 转换为我的数据框的列名,同时,我删除了当前标题,这是进行此操作的函数:

def CreateHeader(df,name_of_line): 

#Select the wanted row for header in Dataframe 
  new_header = df.loc[df['#================================================================================'] == name_of_line]
  new_header_transposée = new_header.T                                     
  df = df[1:]
  df.columns = new_header_transposée


return df

有人可以帮忙解决吗?

标签: pythonpandasdataframe

解决方案


看着错误

KeyError: "None of [Index(['('#AFDX_OUTPUT_VL,')', ' ('Network Id,')', ' ('Connector name,')',\n       ' ('VL Identifier,')', ' ('VL name,')', ' ('Network Select,')',\n       ' ('BAG,')', ' ('Max frame size,')', ' ('Number of sub VL,')',\n       ' ('Sub VL Identifier,')', ' ('port characteristic,')',\n       ' ('IP frag allowed,')', ' ('Src IP address,')',\n       ' ('Dest IP address,')', ' ('Src UDP address,')',\n       ' ('Dest UDP address,')', ' ('Buffer Size,')'],\n      dtype='object')] are in the [columns]"

您的列名中有空格,请通过以下方式删除它们

df.columns = df.columns.str.replace(' ', '')
# or
df.columns = df.columns.str.strip()

另外,您的功能中有错字

def SelectColumn(df,liste):

    print(liste)
    df = df.loc[:,list]
                   ^
                   |
                   should be liste
    return df

推荐阅读