2015-03-06 1 views
0

У меня есть набор данных с большим объемом для очистки (300 столбцов, 30000 строк) и столбцы смешаны. Я использую Python с pandas и numpy. Очень много в стадии обучения учащимся, используя Python.Риски, меняющие ответы NaN на ноль в Python DataFrame

  • В некоторых столбцах были ответы Y или N на вопросы (и они заполнены «Y» или «N»).
  • Некоторые из них были вопросы о масштабах с 5 возможных ответов. В файле CSV каждый ответ (согласен, не согласен и т. Д.) Имеет свой столбец. Это импортировано как 1 для да и NaN в противном случае.
  • Другие вопросы имели до 10 возможных ответов (например, для возраста), и они импортировались как строка в одном столбце, то есть «a. 0-18» или «b. 19-25» и т. Д. Их изменение будет интересным!

По мере прохождения я меняю ответы на Y/N на 1 или 0. Однако для столбцов шкалы likert я обеспокоен тем, что может быть риск сделать то же самое. Есть ли у кого-нибудь мнение относительно того, было бы предпочтительнее оставить данные для них как NaN? Пол одинаковый - для мужчин есть отдельная колонка, а для женщин - одна, а для да и NaN - 1.

Я намереваюсь использовать Python для анализа данных/составления карт (будет импортирован matplotlib & морским путем). Поскольку это ново для меня, я предполагаю, что изменения, которые я сейчас внес, могут иметь непреднамеренные последствия позже!

Любое руководство, которое вы можете дать, было бы высоко оценено.

Заранее спасибо.

ответ

1

Если нет нулей, которые означают что-либо, это нормально, чтобы заполнить NA с помощью значения (0 для удобства). Все зависит от ваших данных. Тем не менее, 300 х 30 тыс. Не так уж и велики. Сохраните его как CSV и просто поэкспериментируйте в IPython Notebook, Pandas, возможно, прочитает его через секунду, поэтому, если вы что-нибудь прикрутите, просто перезагрузите.

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

df = pd.DataFrame({ 
    1: {'agree': 1}, 
    2: {'disagree': 1}, 
    3: {'whatevs': 1}, 
    4: {'whatevs': 1}}).transpose() 
df 

generated DataFrame

question_sets = { 
    'set_1': ['disagree', 'whatevs', 'agree'], # define these lists from 1 to whatever 
} 

for setname, setcols in question_sets.items(): 
    # plug the NaNs with 0 
    df[setcols].fillna(0) 

    # scale each column with 0 or 1 in the question set with an ascending value 
    for val, col in enumerate(setcols, start=1): 
     df[col] *= val 

    # create new column by summing all the question set columns 
    df[setname] = df[question_set_columns].sum(axis=1) 

    # delete all the old columns 
    df.drop(setcols, inplace=True, axis=1) 

df 

resultant DataFrame

+0

Спасибо за ваши советы Ник + размещение кода выше. Это очень полезно, и я ценю, что вы нашли время, чтобы помочь. Я бы поднял вас, но я не могу на данный момент (недостаточно репутации), но, пожалуйста, знайте, что я благодарен вам за вашу помощь. – gincard

+1

@ gincard, если ответ отвечает на ваш вопрос, вы можете принять его с помощью галочки. –

Смежные вопросы