Чтение и передача имени файла в Excel с помощью Pandas - PullRequest
0 голосов
/ 03 января 2019

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

import numpy as np
import pandas as pd
import os
for filename in os.listdir ('./'):
    if filename.endswith ('.xlsx'):
        df = pd.read_excel ('new.xlsx', skiprows=1)
        df.drop (df.columns [0], axis=1, inplace=True)
        df.to_csv ('new.csv', index=False)    

Как мне автоматизировать мой код для всех файлов Excel в одной папке?

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Попробуйте ниже для чтения нескольких файлов следующим образом:

import pandas as pd
import glob

# Read multiple files into one dataframe along with pandas `concat`
# if you have path defined like `/home/data/` then you can use `/home/data/*.xlsx` otherwise you directly mention the path.

df = pd.concat([pd.read_excel(files, sep=',', index=False, skiprows=1) for files in glob.glob("/home/data/*.xlsx")])

Альтернатива: Прочитать несколько файлов в одном кадре данных

all_Files = glob.glob('/home/data/*.xlsx')

df = pd.concat((pd.read_excel(files, sep=',', index=False, skiprows=1) for files in all_Files))
0 голосов
/ 03 января 2019

Используйте переменную filename в функции read_excel, а затем создайте новые имена файлов с помощью format и для удаления первого столбца можно использовать DataFrame.iloc - выбрать все столбцы без первого:

for filename in os.listdir ('./'):
    if filename.endswith ('.xlsx'):
        df = pd.read_excel (filename, skiprows=1)
        df.iloc[:, 1:].to_csv('new_{}.csv'.format(filename), index=False) 

Другое решение с glob, есть возможность указать расширения:

import glob

for filename in glob.glob('./*.xlsx'):
    df = pd.read_excel (filename, skiprows=1)
    df.iloc[:, 1:].to_csv('new_{}.csv'.format(filename), index=False)   
    #python 3.6+    
    #df.iloc[:, 1:].to_csv (f'new_{filename}.csv', index=False)   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...