Как я могу объединить несколько файлов CSV в один лист Excel с помощью Python?

Я пытаюсь объединить несколько файлов CSV в лист Excel, чтобы иметь возможность анализировать свои данные.

До сих пор мне удавалось создать рабочий лист с именами файлов CSV в качестве вкладок, но на самих листах я не могу получить нужные данные.

Я использую read.csv из pandas, но, судя по тому, что я вижу и могу работать, синтаксис дает мне только возможность прочитать данные одного CSV-файла, а затем копирует эти данные на все вкладки, которые это не то, что я хочу.

import pandas as pd 
import os 

os.chdir('C:/Users/user3482176/correct_document_location) 
csv_files = ['doc1.csv', 'doc2.csv', 'doc3.csv'] 
reading = pd.read_csv('C:/Users/user3482176/correct_document_location/doc1.csv') 
with pd.ExcelWriter('combined_csv_files.xlsx', engine='openpyxl') as writer:
    for csv_file in csv_files:
        sheet_name = csv_file.split('.')[0]
        df.to_excel(writer,sheet_name=sheet_name, index=False)
    if_sheet_exists:'overlay'

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

import pandas as pd 
import os 
import glob 

os.chdir('C:/Users/user3482176/correct_document_location) 
csv_files = ['doc1.csv', 'doc2.csv', 'doc3.csv'] 
xlsx_files = glob.glob(os.path.join(directory_path, '*.csv')) 
df_list = [pd.read_csv(file) for file in xlsx_files] 
combined_df = pd.concat(df_list,join='outer', ignore_index=True) 
df = pd.DataFrame(df_list) 

with pd.ExcelWriter('combined_csv_files.xlsx', engine='openpyxl') as writer:
    for csv_file in csv_files:
        sheet_name = csv_file.split('.')[0]
        df.to_excel(writer,sheet_name=sheet_name, index=False)
    if_sheet_exists:'overlay'

Traceback (most recent call last): File "C:\Users\user3482176\PycharmProjects\combination_worksheet\collating sheets.py", line 53, in <module> df = pd.DataFrame(df_list) File "C:\Users\user3482176\PycharmProjects\combination_worksheet\venv\lib\site-packages\pandas\core\frame.py", line 867, in __init__ mgr = ndarray_to_mgr( File "C:\Users\user3482176\PycharmProjects\combination_worksheet\venv\lib\site-packages\pandas\core\internals\construction.py", line 319, in ndarray_to_mgr values = _prep_ndarraylike(values, copy=copy_on_sanitize) File "C:\Users\user3482176\PycharmProjects\combination_worksheet\venv\lib\site-packages\pandas\core\internals\construction.py", line 575, in _prep_ndarraylike values = np.array([convert(v) for v in values]) ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (39,) + inhomogeneous part. 

Я пытаюсь понять, как обойти эту ошибку, чтобы поместить несколько файлов CSV в 1 лист Excel.

Excel может открывать файлы CSV напрямую. Если вы хотите, чтобы все это было на одном листе, просто скопируйте весь файл в один и откройте его. copy doc1.csv+doc2.csv+doc3.csv result.csv и start result.csv.

Tim Roberts 07.07.2024 20:11

Не уверен насчет вашего рабочего процесса, но рассматривали ли вы вариант Импортировать данные из папки с несколькими файлами (Power Query) — Служба поддержки Microsoft?

nkalvi 07.07.2024 21:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

У меня это работает так:

import pandas as pd
import os

csv_files = ['doc1.csv', 'doc2.csv']

excel_writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')

for csv_file in csv_files:

    df = pd.read_csv(csv_file)

    sheet_name = os.path.splitext(os.path.basename(csv_file))[0]
    df.to_excel(excel_writer, sheet_name=sheet_name, index=False)

excel_writer.close()

Вы можете переключить двигатель xlsxwriter с помощью openpyxl

При этом создается файл Excel с листом для каждого файла .csv.

Привет, Адриан, спасибо, что заглянул! У меня это сработало, мне просто нужно было изменить имена некоторых файлов CSV, чтобы они были <31 символа. Можете ли вы объяснить, почему мой код не работал, похоже, я пошел более сложным путем, чем вы.

user3482176 08.07.2024 11:14

@user3482176 user3482176 конечно, я могу попробовать. Прежде всего, я не понимаю, откуда берется ваша переменная Directory_path, но я думаю, что это то же самое, что вы ввели для изменения рабочего каталога. Так что пока скомбинированный_df все в порядке. С помощью pd.concat() вы создали один огромный DataFrame, объединив их вместе, как описано здесь в этом нет необходимости. Затем вы пытаетесь создать один фрейм данных со списком фреймов данных разного размера. Это создает вашу ошибку, поскольку это недопустимый способ создания объекта DataFrame.

AdrianG 08.07.2024 11:35

По сути, вам нужно было изменить свой код, это удалить строки, в которых вы назначаете combined_df и df. И затем не создавайте df_list, вместо этого создайте df из csv в цикле for, чтобы вы могли легко получить доступ к имени файла для имени листа.

AdrianG 08.07.2024 11:37

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