Мой код работает правильно в pandas, но не в modin

#python #pandas #csv #concat #modin

#python #pandas #csv #конкат #модификация

Вопрос:

когда я использую pandas, код работает идеально (но очень медленно), а при использовании modin и concat dataframe выдает ошибку

 contador = 0
df = pd.DataFrame()
data = pd.DataFrame()

for file in range(len(files)):
    usefile = files[file]
    print("Valor Numero :"   str(contador)   " de un total de "   str((len(files)))   " archivos")
    print("Existe "   str(usefile)   " añadiendolo al DataFrame" )
    contador = contador  1
    ruta = mainpath   "/"   str(usefile) 
    df = pd.read_csv(ruta)
    datos[usefile] = df
data = pd.concat(datos.values(), keys=datos.keys() , sort='True')
  

Я ожидаю, что вывод фрейма данных со всеми объединенными файлами будет получен из dict, но y recive (в pandas все работает идеально) :

 <ipython-input-4-e5a361476e76> in <module>
     12     df = pd.read_csv(ruta)
     13     datos[usefile] = df
---> 14 data = pd.concat(datos.values(), keys=datos.keys() , sort='True')
     15 

~/anaconda3/lib/python3.7/site-packages/modin/pandas/concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, sort, copy)
     98         new_idx_labels = {
     99             keys[i]: objs[i].index if axis == 0 else objs[i].columns
--> 100             for i in range(len(objs))
    101         }
    102         print(new_idx_labels)

~/anaconda3/lib/python3.7/site-packages/modin/pandas/concat.py in <dictcomp>(.0)
     98         new_idx_labels = {
     99             keys[i]: objs[i].index if axis == 0 else objs[i].columns
--> 100             for i in range(len(objs))
    101         }
    102         print(new_idx_labels)

TypeError: 'dict_keys' object is not subscriptable
  

Комментарии:

1. Это выглядит как несоответствие между библиотеками для Python 2 и 3

2. Я понятия не имею, как эта кодовая база отображается для Python 3.7, но, похоже, она предназначена для Python 2

Ответ №1:

Это поведение, которое непреднамеренно еще не поддерживается в Modin (версия 0.4), основанное на предположении, что параметры keys and objs подписываются.

Последняя строка в вашем коде может быть изменена в качестве обходного пути, пока она не будет исправлена в Modin:

 data = pd.concat(list(datos.values()), keys=list(datos.keys()) , sort='True')
  

Я создал проблему в репозитории Modin, чтобы отследить проблему: https://github.com/modin-project/modin/issues/557