Чтение определенного столбца из файла Excel с использованием панд - PullRequest
0 голосов
/ 23 мая 2019

У меня есть папка с полными файлами Excel и подпапками. Подпапки также содержат файлы Excel.

С помощью os.walk () я смог просмотреть каждую подпапку и получить данные из этого файла Excel.Моя проблема в том, что я хочу взять только столбец мобильных номеров из всех файлов Excel и сохранить их в базе данных.Проблема в том, что имя столбца для номера мобильного телефона отличается в каждом файле Excel, и есть тысячи файлов Excel.

Поэтому я решил получить столбцы по их типам данных и длине.(Например, если тип данных столбца является целым числом, а длина каждой ячейки в этом конкретном столбце равна 10, я бы отправил эти данные.)

Но я не понимаю, как это сделать.Я зациклил хотя столбцы и строки, но все, что я получил, это повторяющиеся данные или ошибка.Может кто-нибудь помочь мне с этим?Был бы рад, если вы поможете, потому что я делаю это с двух дней, но не удается.Заранее спасибо.

 def file_access(file_path_list):
    for path in file_path_list:
        if path.endswith(('xlsx' , 'xls' , 'XLS')):
            print '------------------------------\n\n'
            folder = path.split('/')[-2]
            sheet = path.split('/')[-1]
            print folder , sheet

            df = pd.read_excel(path, sheet_name=None, header=None)

            # Here i am trying to get data from df object but failing to do so.
            # You can suggest me code from this stage. 

1 Ответ

0 голосов
/ 23 мая 2019

Чтобы получить только номер телефона во многих файлах Excel, вы можете попробовать следующий код:

import pandas as pd
import xlrd
import os

mydir = (os.getcwd()).replace('\\','/') + '/'

#Get all excel files include subdir
filelist=[]
for path, subdirs, files in os.walk(mydir):
    for file in files:
        if (file.endswith('.xlsx') or file.endswith('.xls') or file.endswith('.XLS')):
            filelist.append(os.path.join(path, file))
number_of_files=len(filelist)

# Get data of cells from excel
data=[]
for i in range(number_of_files):
    #df.append(pd.read_excel(r''+ mydir +filelist[i]))
    df=pd.read_excel(r''+filelist[i])
    l=len(df.iloc[0])
    for n in range(l):
        if len(str(df.iloc[0][n])) >= 10:
            data.append(df.iloc[:][df.axes[1][n]])
            break
res=[]
for i in range(len(data)):
    res.append(data[i].values.tolist())
print(res)

Чтобы получить все данные телефона из имени другого столбца, используется длина номера телефона, чтобы отличить его от другого столбца.данные.Для этого случая я использовал длину телефонного номера, используемого в моей стране, который составляет 11 (например, 82330403045).

Выход:

>>> data
[0    82330403045
1    82330403046
2    82330403047
3    82330403048
Name: Phone, dtype: int64, 0    82330403049
1    82330403050
2    82330403051
3    82330403052
Name: PhoneCell, dtype: int64]

>>> res
[[82330403045, 82330403046, 82330403047, 82330403048], [82330403049, 82330403050, 82330403051, 82330403052], [82330403049, 82330403050, 82330403051, 82330403052], [82330403045, 82330403046, 82330403047, 82330403048], [82330403049, 82330403050, 82330403051, 82330403052], [82330403049, 82330403050, 82330403051, 82330403052]]

Вы можете использовать эти выходные данные дляваша база данных.

Мои файлы Excel:

Файл Book1.xlsx:

Файл Book2.xlsx:

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