При "склеивании" трех датафреймов Pandas в итоговом датафрейме появляются лишние столбцы. Не могу понять в чем причина
Всем привет! Есть три excel файла. Мне нужно собрать из них один датафрейм (в каждом файле 22 столбца и разное количество строк). Вроде бы элементарная задача, но итоговый файл получается непонятной размерности - откуда-то добавляются три лишних столбца.
Помогите пожалуйста разобраться в чем дело. Код (для исключение ошибок и наглядности все три файла импортирую в отдельные датафреймы, а потом сливаю в один):
file1 = pd.read_excel(directory+'PH7_2015_04-05.xlsx', sheet_name = 'Данные',skiprows = 5, usecols = "A:V")
file2 = pd.read_excel(directory+'PH7_2015_06-08.xlsx', sheet_name = 'Данные', skiprows = 5, usecols = "A:V")
file3 = pd.read_excel(directory+'PH7_2015_09.xlsx', sheet_name = 'Данные', skiprows = 5, usecols = "A:V")
print(file1.shape, file2.shape, file3.shape)
# Результат - (87840, 22) (132482, 22) (29281, 22)
Теперь сливаю в один и столбцов становится 25(!)
file_final = pd.concat([file1,file2,file3], ignore_index = True)
file_final.shape
# Результат - (249603, 25)
Прошу помочь разобраться, откуда берется лишние столбцы.
Вот ссылка на файлы с сэмплами данных
Ответы (1 шт):
Такой результат получается при несовпадении столбцов - вот пример:
In [192]: d1
Out[192]:
a b c
0 1 2 3
1 4 5 6
In [193]: d2
Out[193]:
a b d
0 7 8 9
In [194]: pd.concat([d1, d2], ignore_index = True)
Out[194]:
a b c d
0 1 2 3.0 NaN
1 4 5 6.0 NaN
2 7 8 NaN 9.0
Для того, чтобы решить вашу задачу - определитесь что вы хотите получить в результате и приведите в вопросе небольшой пример входных данных и желаемый результат.
Для приведенных по ссылке данных - следующие столбцы не присутствуют во всех фреймах:
In [221]: all_cols = d1.columns.union(d2.columns).union(d3.columns)
In [222]: all_cols.difference(d1.columns)
Out[222]: Index(['бар.5', 'бар.6', 'гр. С.4'], dtype='object')
In [223]: all_cols.difference(d2.columns)
Out[223]: Index(['бар.6', 'мм.2', 'мм.3'], dtype='object')
In [224]: d1.columns.difference(d2.columns)
Out[224]: Index(['мм.2', 'мм.3'], dtype='object')
In [229]: d1.columns.difference(d3.columns)
Out[229]: Index(['Unnamed: 21', 'мм.2', 'мм.3'], dtype='object')
In [230]: d2.columns.difference(d3.columns)
Out[230]: Index(['Unnamed: 21'], dtype='object')
In [231]: d2.columns.difference(d1.columns)
Out[231]: Index(['бар.5', 'гр. С.4'], dtype='object')