Попытка взять несколько таблиц Excel, извлечь определенные данные c, добавить их все в один фрейм данных и сохранить как файл CSV. - PullRequest
0 голосов
/ 23 февраля 2020

Очень плохо знакомы с этим, поэтому, пожалуйста, go просто для меня:)

Попытка взять несколько таблиц Excel, извлечь данные из c из указанных ячеек c, добавить их все в один кадр данных и сохраните его как CSV-файл.

Вывод csv содержит только данные из последнего файла Excel. Пожалуйста, не могли бы вы помочь?

 import pandas as pd
 import os
 from pathlib import Path

 ip = "//NETWORKLOCATION/In"
 op = "//NETWORKLOCATION/Out"

 file_exist = False
 dir_list = os.listdir(ip)
 print(dir_list)

 for xlfile in dir_list:
     if xlfile.endswith('.xlsx') or xlfile.endswith('.xls'):
         file_exist = True
         str_file = os.path.join(ip, xlfile)
         df1 = pd.read_excel(str_file)

         columns1 = {*VARIOUSDATA -* 
                     }

         #creates an empty dataframe for the data to all sequentially be added into
         df1a = pd.DataFrame([])

         #appends the array to the new dataframe df1a
         df1a = df1a.append(pd.DataFrame(columns1, columns = ['*VARIOUS COLUMNS*]))

         if not file_exist:
                 print('cannot find any valid excel file in the folder ' + ip)

                 print(str_file)

 df1a.to_csv('//NETWORKLOCATION/Out/Test.csv')
 print(df1a)

Ответы [ 4 ]

1 голос
/ 23 февраля 2020

Пара вещей. Во-первых, вы никогда не встретите:

if not file_exist:
                 print('cannot find any valid excel file in the folder ' + ip)

                 print(str_file)

, как написано, потому что это вложенный оператор if и поэтому file_exists всегда устанавливается в значение true, прежде чем он будет достигнут.

Вы создаете df1a внутри себя для l oop. Поэтому вы всегда устанавливаете его обратно пустым. Зачем импортировать путь, а затем использовать os.path и os.listdir? Почему бы просто не использовать Path (ip) .glob (' .xls ')

Это будет выглядеть так:

import pandas as pd
import os
from pathlib import Path

ip = "//NETWORKLOCATION/In"
op = "//NETWORKLOCATION/Out"

#creates an empty dataframe for the data to all sequentially be added into
df1a = pd.DataFrame([])

for xlfile in Path(ip).glob('*.xls*'):
    df1 = pd.read_excel(xlfile)

    columns1 = {"VARIOUSDATA"}

    #appends the array to the new dataframe df1a
    df1a = df1a.append(pd.DataFrame(columns1, columns = ['VARIOUS_COLUMNS']))

if df1a.empty:
    print('cannot find any valid excel file in the folder ' + ip)
    print(str_file)
else:
    df1a.to_csv(op+'/Test.csv')
    print(df1a)

1 голос
/ 23 февраля 2020

Я думаю, вы должны поставить:

#creates an empty dataframe for the data to all sequentially be added into
df1a = pd.DataFrame([])

до for xlfile in dir_list: l oop, а не внутри l oop. В противном случае df1a воссоздает пустой на каждой итерации файла.

0 голосов
/ 11 марта 2020

Нечто подобное должно работать для вас.

import os
import pandas as pd

import glob
glob.glob("C:\\your_path\\*.xlsx")

all_data = pd.DataFrame()
for f in glob.glob("C:\\your_path\\*.xlsx"):
    df = pd.read_excel(f)
    all_data = all_data.append(df,ignore_index=True)

type(all_data)

Проверьте эту ссылку.

https://pbpython.com/excel-file-combine.html

0 голосов
/ 23 февраля 2020

Вывод csv содержит только данные из последнего файла Excel.

Вы создаете df1a DataFrame внутри for loop. Каждый раз, когда вы читаете новый xlfile, вы создаете новый пустой DataFrame.

. Вы должны поместить df1a = pd.DataFrame([]) в 9-ю строку вашего сценария перед l oop.

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