Удалите столбцы Без названия в pandas dataframe

У меня есть файл данных из столбцов A-G, как показано ниже, но когда я читаю его с помощью pd.read_csv('data.csv'), он печатает дополнительный столбец unnamed в конце без каких-либо причин.

colA    ColB    colC    colD    colE    colF    colG    Unnamed: 7
44      45      26      26      40      26      46        NaN
47      16      38      47      48      22      37        NaN
19      28      36      18      40      18      46        NaN
50      14      12      33      12      44      23        NaN
39      47      16      42      33      48      38        NaN

Я видел файл данных раз в разное время, но у меня нет дополнительных данных в любом другом столбце. Как я должен удалить этот дополнительный столбец во время чтения? Благодаря

Ответ 1

df = df.loc[:, ~df.columns.str.contains('^Unnamed')]

In [162]: df
Out[162]:
   colA  ColB  colC  colD  colE  colF  colG
0    44    45    26    26    40    26    46
1    47    16    38    47    48    22    37
2    19    28    36    18    40    18    46
3    50    14    12    33    12    44    23
4    39    47    16    42    33    48    38

если первый столбец в CSV файле имеет значения индекса, то вместо этого вы можете сделать это:

df = pd.read_csv('data.csv', index_col=0)

Ответ 2

Сначала найдите столбцы, которые имеют "безымянный", а затем отбросьте эти столбцы. Примечание. Вы также должны добавить inplace = True к параметрам .drop.

df.drop(df.columns[df.columns.str.contains('unnamed',case = False)],axis = 1, inplace = True)

Ответ 3

Функция pandas.DataFrame.dropna удаляет пропущенные значения (например, NaN, NaT).

Например, следующий код удалит все столбцы из вашего фрейма данных, где отсутствуют все элементы этого столбца.

df.dropna(how='all', axis='columns')

Ответ 4

Утвержденное решение не работает в моем случае, поэтому мое решение следующее:

    ''' The column name in the example case is "Unnamed: 7"
 but it works with any other name ("Unnamed: 0" for example). '''

        df.rename({"Unnamed: 7":"a"}, axis="columns", inplace=True)

        # Then, drop the column as usual.

        df.drop(["a"], axis=1, inplace=True)

Надеюсь, что это помогает другим.