Как правильно удалить столбец в фрейме данных (панды)? - PullRequest
0 голосов
/ 05 февраля 2019

Я не могу удалить столбец из csv, используя панд.Я пытался удалить его разными способами, используя другую ось, функцию del, но она не работает.Кто-нибудь знает почему?

Вот мой pandas.head ()

age;"job";"marital";"education";"default";"balance";"housing";"loan";"contact";"day";"month";"duration";"campaign";"pdays";"previous";"poutcome";"y"
0  58;"management";"married";"tertiary";"no";2143...<br>
1  44;"technician";"single";"secondary";"no";29;"...<br>
2  33;"entrepreneur";"married";"secondary";"no";2...<br>
3  47;"blue-collar";"married";"unknown";"no";1506...<br>
4  33;"unknown";"single";"unknown";"no";1;"no";"n...  

Вот мой код:

import pandas  
df = pd.read_csv('bank-full.csv')
print(df.head())
df = df.drop(['day', 'poutcome'], axis=1)

Вот ошибка:

Traceback (most recent call last):
  File "/home/administrator/PycharmProjects/BankMarketinData/main.py", line 21, in 
    main()
  File "/home/administrator/PycharmProjects/BankMarketinData/main.py", line 19, in main
    df = df.drop(['day', 'poutcome'], axis=1)
  File "/home/administrator/anaconda3/lib/python3.6/site-packages/pandas/core/frame.py", line 3697, in drop
    errors=errors)
  File "/home/administrator/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py", line 3111, in drop
    obj = obj._drop_axis(labels, axis, level=level, errors=errors)
  File "/home/administrator/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py", line 3143, in _drop_axis
    new_axis = axis.drop(labels, errors=errors)
  File "/home/administrator/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 4404, in drop
    '{} not found in axis'.format(labels[mask]))
KeyError: "['day' 'poutcome'] not found in axis"

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Вы можете удалить их один за другим или использовать цикл, чтобы удалить несколько столбцов.Вы должны убедиться, что эти имена столбцов находятся в кадре данных.Похоже, что из вашего вопроса имя вашей колонки заключено в "".Убедитесь, что вы правильно указали разделитель при чтении в кадре данных.При использовании read_csv по умолчанию используется значение ',', но в этом случае это ';'.

Один за другим

df = pd.read_csv('bank-full.csv', sep=';')
df = df.drop(['day'], axis=1)
df = df.drop(['poutcome'], axis=1)

Петля

df = pd.read_csv('bank-full.csv', sep=';')
Drop_list = ['day','poutcome']
for column in Drop_list: 
    df = df.drop([column], axis=1)

Тест, который я использовал для вопроса:

df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))
df.head(5)

              A         B         C         D
    0  0.860680 -0.408577  0.727530 -0.119050
    1 -1.140042  0.241970 -1.509257 -0.303601
    2  0.811929  0.146228  2.102941  0.772328
    3 -0.590157  0.753719  0.220592 -0.563953
    4  0.031505 -0.521978  0.410718 -0.325865

Drop_list = ['A','B','C']
for column in Drop_list:
    df = df.drop([column], axis=1)
df.head(5)

          D
0 -0.119050
1 -0.303601
2  0.772328
3 -0.563953
4 -0.325865
0 голосов
/ 05 февраля 2019

Так что это довольно простая проблема.Прежде всего, я бы посоветовал вам использовать delimiter всякий раз, когда вы имеете дело с tabular данными.Теперь давайте сосредоточимся на вашей проблеме, поэтому вы читаете свой dataframe следующим образом:

import pandas as pd  
df = pd.read_csv('bank-full.csv')
df = df.drop(['day', 'poutcome'], axis=1)

Теперь ваши column имена содержат "" в них.Таким образом, имя ваших столбцов "day" & "poutcome", а не day & poutcome.Помните, что эти double quotes "" являются частью названия вашего столбца.Поэтому вы должны написать что-то вроде этого, чтобы убрать эти столбцы:

df = df.drop(['"day"', '"poutcome"'], axis=1)

Надеюсь, это поможет вам.Если у вас есть дополнительные вопросы, дайте мне знать

0 голосов
/ 05 февраля 2019
df = pd.read_csv('bank-full.csv', sep=';')
df.columns = [col.replace('"', '') for col in df.columns]
df.drop(columns=['day','poutcome'], inplace=True)

Как видно из последующих комментариев, ваши проблемы заключаются в том, что у вас неправильный разделитель при вводе файла CSV.Затем вам нужно удалить кавычки в именах столбцов, чтобы можно было отбрасывать эти столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...