Но пост публикую. Здесь все же записан процесс моей работы (а исправления ошибок в следующих постах). Вот неправильное начало поста:
Этот класс будет построен по тому же принципу, что и AEBto3tables - метод с итератором по файлам в папке вызывает последовтельно методы проверки однородности таблиц, чистки столбцов, конвертации форматов, добавления столбцов, конкатенции таблиц. Пишу все в Spyder на компьютере "Kali"
Reading Multiple CSV Files into Python Pandas Dataframe
Writing to CSV format
Pandas или file.read... Типовая задача: В папке пара десятков сравнительно коротких файлов...
Ищем команды для проверки, чистки и конвертации столбцов в числовой формат
Pandas как лучше склеивать файлы... Справочник методов read_csv, to_csv, DataFrame
import os
# The usual preamble
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Make the graphs a bit prettier, and bigger
pd.set_option('display.mpl_style', 'default')
plt.rcParams['figure.figsize'] = (15, 5)
path = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1aug2'
!ls '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1aug2'
Как выбрать все файлы в папке, задав список для формирования имен по шаблону¶
months = ['january', 'febrary', 'march', 'april', 'may', 'jun',
'july', 'august','september', 'october','november', 'december']
dict = {'january':'31-1', 'febrary':'28-2', 'march':'31-1', 'april':'30-4', 'may':'31-5', 'jun':'30-6',
'july':'31-7', 'august':'31-8','september':'30-9', 'october':'31-10','november':'30-11', 'december':'31-12'}
# We can construct filepath with string formatter '**** ****%d**' % digit
#years = range(1880, 2011)
#names = pd.DataFrame()
for month in months:
pathm = path +'/eng_car-sales-in-%s-2014.csv' % month
#frame = pd.read_csv(path, names=columns)
#frame['year'] = year
#names = pd.concat(names, frame, ignore_index=True)
print(pathm)
Недостаток мкеода в том, что файлов с такими именами может не быт в папке. Значит, нужно писать обработчики ошибок... Альтернатива, прочитать все файлы из папки, используя os.listdir(path), а потом отфильтровать нужные
Как перебрать все имена файлов в папке и отфильтровать удовлетворяющие шаблону¶
Вот только с фильтром вышла проблемка. Я планировал испоьзовать contains(), а этого метода нет у строк... это я недавно юзал в 6.3 Plotting temperature and snowiness stats together свойства Pandas
is_snowing = weather_2012['Weather'].str.contains('Snow')
Эти фильты можно применять, но здесь надо по строкам выбирать, вот нашел вариант с .startswith()
for csvfile in os.listdir(path):
if csvfile.startswith('eng_car-sales-in'):
csvfile_path = os.path.join(path, csvfile)
#pdtemp = pd.read_csv(csvfile_path, error_bad_lines=False)
#
#
print(csvfile)
Можно было бы еще применить .split() или найти подстроку .find() ...
'eng_car-sales-in-april-2014.csv'.split('-'), 'eng_car-sales-in-april-2014.csv'.split('-')[3]
'eng_car-sales-in-april-2014.csv'.find('eng_car'), 'eng_car-sales-in-april-2014.csv'.find('notpart')
namen = 'eng_car-sales-in-april-2014.csv'.split('-')[3]
dict[namen]
Повторим код из поста Pandas или file.read...
for csvfile in os.listdir(path):
csvfile_path = os.path.join(path, csvfile)
pd000 = pd.read_csv(csvfile_path, error_bad_lines=False)
print ('****** ' + csvfile)
pd000.info(verbose=True, buf=None, max_cols=None, memory_usage=True, null_counts=True)
Почему в файлах разное количество строк?
Здесь надо бы записать ответ... Открываем исходный pdf-файл апреля и читаем над таблицей:
NEW CAR AND LCV SALES IN RUSSIA BY GROUPS FOR JANUARY - APRIL 2014/2013 AND APRIL 2014/2013
Очевидно, что количество групп может отличаться от месяца к месяцу. Так что пока, даже если мы кого и потеряли, то не страшно. Пока нет задач, требующих тщательного контроля парсинга.
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий