РЕДАКТИРОВАТЬ №2: Фактические данные отличались от данных образца, и их нужно было объединить по горизонтали, а не по вертикали, передавая axis=1
. Это создает повторяющиеся столбцы, поэтому фрейм данных необходимо транспонировать с помощью .T
, чтобы удалить эти повторяющиеся столбцы как повторяющиеся строки с drop_duplicates()
. Наконец, его нужно снова перенести обратно с помощью .T
. Кроме того, нам пришлось исключить слушателей при чтении файлов, так как два файла имели одно и то же значение, поэтому они могли быть случайно отброшены. Вот почему нам пришлось читать заголовки столбцов как значения, а затем продвигать их обратно в заголовки в конце и отбрасывать первую строку с помощью .iloc
.
pd.concat([pd.read_csv(f, header=None) for f in all_files], axis=1).T.drop_duplicates().T.to_csv('merged.csv', index=False)
df.columns = df.iloc[0]
df = df.iloc[1:]
df.to_csv('merged.csv', index=False)
РЕДАКТИРОВАТЬ №1: Как обсуждалось в LinkedIn, все ваши данные были в одном столбце, поэтому, чтобы читать их как несколько столбцов, вам нужно использовать sep='\s+'
, потому что есть несколько пробелов, разделяющих ваши данные, поэтому вы можете использовать \s+
в качестве разделителя или разделителя.
Для однострочника используйте .assign
с file=os.path.basename(f)
pd.concat([pd.read_csv(f, sep='\s+').assign(file=os.path.basename(f)) for f in all_files]).to_csv('merged.csv', index=False)
Согласно вашему комментарию, я протестировал этот точный код с разными столбцами и получил успешный результат:
import pandas as pd
import glob, os
path = 'Desktop'
all_files = glob.glob(os.path.join(path, "Book*.csv"))
pd.concat([pd.read_csv(f, sep='\s+').assign(file=os.path.basename(f)) for f in all_files]).to_csv('merged.csv', index=False)
Если файлы Excel уже разделены на столбцы, удалите sep='\s+'
и используйте этот код:
pd.concat([pd.read_csv(f).assign(file=os.path.basename(f)) for f in all_files]).to_csv('merged.csv', index=False)
Book1.csv
col1 col2 col3 col4 col5
1 2 3 4 5
Book2.csv
col1 col2 col3 col4
2 3 4 5
merged.csv
col1 col2 col3 col4 col5 file
1 2 3 4 5 Book1.csv
2 3 4 5 Book2.csv