Панды не читают первый столбец из файла xlsx

1

Я работаю через один файл excel, где он содержит несколько (36) листов по month_year (сентябрь 18 - 15 октября), читая их все, используя словарь

import pandas as pd

fileName = 'project_dropColumnICSv2.xlsx'
df = pd.ExcelFile(fileName)

sheetNames = df.sheet_names
vars_dict = {}

for sheetName in sheetNames:
    vars_dict["the_{0}".format(sheetName)] = pd.read_excel(fileName, sheet_name=sheetName, index_col=False)

mykeys = []

for key, value in vars_dict.items():
    mykeys.append(key)

Мне нужно установить их 14 имен столбцов одновременно, но я получаю ValueError: Несоответствие длины

Здесь мы видим, что некоторые листы содержат только 13 столбцов

for mykey in mykeys:
    print("'{}' contains {} columns".format((mykey), len(vars_dict.get(mykey).columns)))

'the_Sep 18' contains 14 columns
'the_Aug 18' contains 14 columns
'the_Jul 18' contains 14 columns
'the_Jun 18' contains 14 columns
'the_May 18' contains 14 columns
'the_April 18' contains 14 columns
'the_March 18' contains 14 columns
'the_February 18' contains 13 columns
'the_January 18' contains 14 columns
'the_December 17' contains 13 columns
'the_November 17' contains 13 columns
'the_October 17' contains 13 columns
'the_September 17' contains 13 columns
'the_August 17' contains 14 columns
'the_July 17' contains 14 columns
'the_June 17' contains 14 columns
'the_May 17' contains 14 columns
'the_April 17' contains 14 columns
'the_MARCH 17' contains 14 columns
'the_February17' contains 14 columns
'the_January17' contains 14 columns
'the_December16' contains 14 columns
'the_November16' contains 14 columns
'the_October 16' contains 14 columns
'the_September' contains 14 columns
'the_August' contains 15 columns
'the_July' contains 14 columns
'the_June' contains 14 columns
'the_May' contains 14 columns
'the_April' contains 14 columns
'the_March' contains 13 columns
'the_February' contains 13 columns
'the_January' contains 13 columns
'the_December' contains 13 columns
'the_November' contains 14 columns
'the_October' contains 13 columns

Я попробовал просто добавить еще один столбец

for mykey in mykeys:
    if len(vars_dict.get(mykey).columns) == 13:
        vars_dict.get(mykey)['Another Column'] = 'Nan'

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

Предполагая, что у меня есть массив имен столбцов, как я могу это сделать?

for mykey in mykeys:
    vars_dict.get(mykey).columns = column

PS есть один лист, который содержит 15 столбцов, которые решаются простым снижением последнего

  • 0
    Так проблема в том, почему в вашем файле не читается первый столбец? Очень трудно найти проблему без ваших реальных данных (или выборки данных с той же структурой, значения должны быть фиктивными, если реальные являются достоверными). Так можно ли поделиться вашим файлом - по gdocs, dropbox, похоже?
  • 0
    Проблема в некоторых листах. Первый столбец «Дата» не читается, в то время как другие имеют его в качестве первого столбца.
Теги:
pandas
python-3.x

1 ответ

0
Лучший ответ

Мне кажется, нужен параметр sheet_name=None для преобразования всех листов в OrderedDict of DataFrames в read_excel:

fileName = 'project_dropColumnICSv2.xlsx'
dfs = pd.read_excel(fileName, sheet_name=None)

Затем используйте понимание словаря для проверки количества столбцов и установите новый по assign и создайте новый словарь:

dfs = {k: v.assign(New = np.nan) if len(v.columns) == 13 else v for k, v in dfs.items()}

Также, если необходимо изменить ключи:

dfs = {f'the_{}'.format(k): v.assign(New = np.nan) 
       if len(v.columns) == 13 
       else v for k, v in dfs.items()}

Затем выберите каждый DataFrame по ключу:

print (dfs['Sep 18'])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню