Pandas: dataframe с обновленным более длинным столбцом

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

создает DataFrame с заголовками Pass, Error

    Pass     Error   

добавляет источники

    Pass     Error  
0   source1  NaN  
1   source2  NaN  

Затем у меня есть 4 ошибки как pd.Series(errors), но отображаются только первые две ошибки. Как мне получить свой ожидал?

действительный

    Pass     Error  
0   source1  source2err1  
1   NaN      source2err2  

ожидал

    Pass     Error  
0   source1  source2err1  
1   NaN      source2err2  
2   NaN      source2err3  
3   NaN      source2err4    

ОБНОВИТЬ

def update_df(file):
    errors = report_df[ERROR].dropna().tolist()
    sources = report_df[PASS].dropna().tolist()   
    new_errors = get_errors(file)
        if new_errors:  
            errors.extend(new_errors)  
            if file in sources:  
                sources.remove(file)  
    report_df[ERROR] = pd.Series(errors)  
    report_df[PASS] = pd.Series(sources)

Какой у вас код для добавления pd.Series(errors) к DataFrame? Как данные выравниваются по столбцу Pass?

jezrael 26.10.2018 07:13

то, что я сделал, было errors=report_df[ERROR].dropna().tolist()проверить на наличие ошибок и обновить список errors, а затем вернул его как report_df[ERROR]=pd.Series(errors)

Dee 26.10.2018 07:15

Имеется разная длина данных, поэтому не удалось. Вы можете добавить свой код? Думаю, минимальный, полный и проверяемый пример.

jezrael 26.10.2018 07:27

да, я наткнулся на разную длину данных. Есть ли способ отрегулировать количество строк в столбце с самым длинным индексом строки и заполнить все остальное с помощью NaN?

Dee 26.10.2018 07:41
1
4
169
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать создать новый DataFrame с Series, например:

sources = list('xy')
errors = list('abcd')
df = pd.DataFrame({'Pass': pd.Series(sources), 'Errors': pd.Series(errors)})
print (df)
  Pass Errors
0    x      a
1    y      b
2  NaN      c
3  NaN      d

Или используйте concat:

sources = list('xy')
errors = list('abcd')
df = pd.concat([pd.Series(sources), pd.Series(errors)], keys=('Pass','Errors'), axis=1)
print (df)
  Pass Errors
0    x      a
1    y      b
2  NaN      c
3  NaN      d

Я думал, что могу отойти от pd.concat(), но, тем не менее, это сработало. Бесконечно благодарен!

Dee 26.10.2018 08:32

Другие вопросы по теме