Поиск по блогу

суббота, 11 апреля 2015 г.

Неудачный шаблон (3) конкатенции... поскольку влетаем в чересполосицу "третьих" таблиц из файлов aerbu

"Третьи таблицы" - это таблицы, в которых приведены 25 самых продаваемых марок автомобилей. В 2014 году формат таблиц поменяли в июле. Открываешь папку, там имена всех файлов имеют одинаковый префикс, естественно, хочется запихнуть в DataFran (pdall) все файлы сразу. Но при распечатывании фрагментов padll обнаруживается "перемешивание столбцов". Здесь я "нашел" способ распечатать фрагменты из каждого файла. И понимаешь, что надо контролировать содержимое каждого файла перед загрузкой (в редакторе, хе-хе...). Потом понимаешь, что прежде, чем писать (предварительный прсмотр) загрузчик надо бы понять, как это нужно делать именно с Pandas... Польза от поста: можно понять, как до меня доходила простая идея о том, что можно сначала все просто загрузить в один фрейм, а потом из него фильтровать одинаковые форматы...

Очевидно, что третья таблица понадобится. Сразу состыкуем ее с первой.

Сразу же скопируем ячейки с данными первой таблицы, нам нужно проанализировать содержание столбцов их имена должны соответствовать

In [ ]:
# Это копипаст из первой таблицы ДЛЯ СПРАВКИ
# Path to dir with files Must end with traling slash '/'
#DIRPATH = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/'

# Insert my columns names in Dataframe objects
#COLNAMES =['Brandt', '2014y', '2013y', '1413y', '2014m', '2013m', '1413m', 'Datem']

RUN: Опреднлим путь к исходным файлам для третьей таблицы

In [7]:
DIRPATH = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/3aug2/'
In [ ]:
#### Теперь проанализируем содержание файлов
In [ ]:
# Это фрагмент из первой таблицы
"Lada","54 543","66 947","-19%","30 896","36910","-16%",
"Renault*","29 615","30 040","-1%","16 721","15299","9%",
"Nissan*","28 209","22 051","28%","17 158","13126","31%",
In [ ]:
####Здесь в каждом файле по 25 строк
In [ ]:
Нам нужно определить, какие столбцы в двух шаблонах совпадают, и составить новый список заголовков. 
In [ ]:
# Это фрагменты из третьей таблицы
"1","Granta","Lada","45570","52765","(7,195)","-14%","13077","15596","(2,519)","-16%",
"2","Solaris","Hyundai","35218","35941","(723)","-2%","9774","10553","(779)","-7%",
"3","New Rio","KIA","29971","28211","1,760","6%","9045","8430","615","7%",
...
"23","Juke","Nissan","9589","7750","1,839","24%","2837","1657","1,180","71%",
"24","Outlander","Mitsubishi","9447","8015","1,432","18%","1526","2447","(921)","-38%",
"25","X-Trail","Nissan","9177","8767","410","5%","1436","1614","(178)","-11%",
In [ ]:
# 25 BEST SOLD MODELS OF CARS IN RUSSIA FOR
# JANUARY - APRIL 2014/2013 AND APRIL 2014/2013
# (Data submitted by the AEB Automobile Manufacturers Committee; retail sales of imported and locally produced vehicles)

Особенности исходных данных

Злдесь встречаемся с новым способом записи отрицательных чисел

In [ ]:
"1","Granta","Lada","45570","52765","(7,195)","-14%","13077","15596","(2,519)","-16%",

Запятая, разделяющая тысячи внутри клруглых скобок. Вот почему у меня депрессия, каждый раз какое-нибудь нововведние... В доументации не нашел опции для скобок... попробуем применить .str.replace(...).astype()

RUN: Названия столбцов для третьего шаблона(3) csv файла данных "aerbu"

In [8]:
# Insert my columns names in Dataframe objects
COLNAMES =['Model', 'Brandt', \
           '2014y3', '2013y3', 'u1413y3', '1413y3', \
           '2014m3', '2013m3', 'u1413m3', '1413m3', 'Datem']

Здесь самое время порассуждать о том, как называть столбцы. С одной стороны, данные имеют тот же "физический смысл", что и в первой таблице. Сначала суммарные столбцы за год, потом помесячные продажи. Так что, нет смысла переименовывать столбцы.
С другой стороны, если я захочу (вдруг) слить каким-либо образом два вида таблиц, то с одинаковыми заголовками столбцов могут возникнуть проблемы..., даже, если я просто открою пару файлов в которых есть строки заголовков, то могу решить, что эти данные можно стравнивать...
Так что, чтобы не думать, проще вставить один символ, например "3" в заголовки столбцов данных. И далее руководствоваться простым правилом - Столбцы с одинаковыми именами из разгных таблиц могут быть ключевыми

RUN: Оставшиеся исходные данные

In [9]:
# При считывании каждого файла во фрейм нужно будет добавлять столбец дат, 
# для этого мы используем список и словарь:
months = ['january', 'february', 'march', 'april', 'may', 'june',
        'july', 'august','september', 'october','november', 'december']
    
dict = {'january':'31-1', 'february':'28-2', 'march':'31-3',
        'april':'30-4', 'may':'31-5', 'june':'30-6',
        'july':'31-7', 'august':'31-8','september':'30-9', 
        'october':'31-10','november':'30-11', 'december':'31-12'}

RUN: Сформируем список исходных файлов

In [10]:
!ls '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/3aug2/'  -hl 
total 52K
-rw-r--r-- 1 kiss kiss 2.1K Feb 20 21:12 eng_car-sales-in-april-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-august-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-december-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-july-2014.csv
-rw-r--r-- 1 kiss kiss 2.2K Feb 20 21:12 eng_car-sales-in-june-2014.csv
-rw-r--r-- 1 kiss kiss 2.1K Feb 20 21:12 eng_car-sales-in-may-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-november-2014.csv
-rw-r--r-- 1 kiss kiss 2.0K Feb 20 21:12 eng_car-sales-in-october-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-september-2014.csv
-rw-r--r-- 1 kiss kiss 2.1K Feb 20 21:12 sales-in-december_2013_eng_final.csv
-rw-r--r-- 1 kiss kiss 2.0K Feb 20 21:12 sales-in-february_2014_eng_final.csv
-rw-r--r-- 1 kiss kiss 1.3K Feb 20 22:15 sales-in-january_2014_eng_final_1.csv
-rw-r--r-- 1 kiss kiss 2.0K Feb 20 21:12 sales-in-march_2014_eng_final.csv

Поскольку приходится парсить имя файла, чтобы вытащить название месяца, то поступим так же, как и с первой таблицей. Начнем с фильтра

In [11]:
filterfilenames = 'eng_car-sales-in'

RUN: Теперь решим, куда все это сохранять

In [12]:
# Don`t forget to create folder 
!mkdir /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/3tab
In [ ]:
%%file /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/3tab/2014_info.txt

resources folder: /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/3aug2/
filters:   if csvfile.startswith filterfilenames = 'eng_car-sales-in'
concatent sourcefiles: 9 
-rw-r--r-- 1 kiss kiss 2.1K Feb 20 21:12 eng_car-sales-in-april-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-august-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-december-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-july-2014.csv
-rw-r--r-- 1 kiss kiss 2.2K Feb 20 21:12 eng_car-sales-in-june-2014.csv
-rw-r--r-- 1 kiss kiss 2.1K Feb 20 21:12 eng_car-sales-in-may-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-november-2014.csv
-rw-r--r-- 1 kiss kiss 2.0K Feb 20 21:12 eng_car-sales-in-october-2014.csv
-rw-r--r-- 1 kiss kiss 2.4K Feb 20 21:12 eng_car-sales-in-september-2014.csv

headers:   COLNAMES =['Model', 'Brandt', \
           '2014y3', '2013y3', 'u1413y3', '1413y3', \
           '2014m3', '2013m3', 'u1413m3', '1413m3', 'Datem']
results:   newpath = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/3tab/2014.csv'    
help:      [Первый рабочий пример конкатенции таблиц с преобразованием форматов столбцов object -> float]
           http://pythonr.blogspot.ru/2015/04/object-float.html
weblog:    http://pythonr.blogspot.com/2015/04/3-aerbu.html

Сюда мы возвращаемся после того, как сформирован и почищен объект pdall

In [ ]:
newpath = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/3tab/2014.csv'  
In [ ]:
print COLNAMES
In [14]:
pdall.to_csv(newpath + '2014.csv', 
        sep=';', 
        #float_format='%.8f',
        columns=COLNAMES,
        index=False)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-14-3c39edf76043> in <module>()
----> 1 pdall.to_csv(newpath + '2014.csv', 
      2         sep=';',
      3         #float_format='%.8f',
      4         columns=COLNAMES,
      5         index=False)

NameError: name 'pdall' is not defined

Формируем объект pdall

RUN: Для справки: метод addDatem() инициализировать до запуска итератора

In [15]:
def addDatem(csvfile):
    # Parse month name from filename
    namen = csvfile.split('-')[3]            # 'april' for example
    
    # Replace strings with dict     'april':'30-4', 
    datstr = dict[namen] + '-2014'  # '30-4-2014'    
    return datstr

RUN: Протестируем, как работает addDatem().

In [16]:
csvfile = 'eng_car-sales-in-april-2014.csv'
addDatem(csvfile)
Out[16]:
'30-4-2014'

RUN: Импортируем Pandas и OS

In [18]:
import os
import pandas as pd

RUN: Запускаем итератор

In [19]:
#import pdb; pdb.set_trace()  #Если раскоментировать, то можно испоьзовать паузы    
pdall =  pd.DataFrame()
for csvfile in os.listdir(DIRPATH):
    if csvfile.startswith(filterfilenames):
        csvfile_path = os.path.join(DIRPATH, csvfile)
        
        pdtemp = pd.read_csv(csvfile_path, error_bad_lines=False, \
                             names=COLNAMES, na_values=['-','n/a'], \
                             quotechar='"', sep=',', thousands=',')
        pdtemp['Datem'] = addDatem(csvfile)                          #Закомментировать 
        pdall = pd.concat([pdall, pdtemp], ignore_index=True)        #Закомментировать
        
        #print (csvfile)                                           #Раскомментировать 
        #print (pdtemp)                                            #Раскомментировать
print(pdall)                                                         #Закомментировать       
          Model      Brandt  2014y3   2013y3   u1413y3      1413y3  \
0        Granta        Lada   45570    52765   (7,195)        -14%   
1       Solaris     Hyundai   35218    35941     (723)         -2%   
2       New Rio         KIA   29971    28211     1,760          6%   
3        Duster     Renault   28153    25945     2,208          9%   
4        Kalina        Lada   25864    28395   (2,531)         -9%   
5          Polo          VW   21366    21798     (432)         -2%   
6        Largus        Lada   20491    14379     6,112         43%   
7        Priora        Lada   18173    21495   (3,322)        -15%   
8        Almera      Nissan   16950      596    16,354       2744%   
9          Niva   Chevrolet   15534    17748   (2,214)        -12%   
10        Logan     Renault   14342    16674   (2,332)        -14%   
11      Sandero     Renault   13777    14464     (687)         -5%   
12   Octavia A7       Škoda   13171        0       NaN         NaN   
13          4x4        Lada   12931    14599   (1,668)        -11%   
14        RAV 4      Toyota   12501    11410     1,091         10%   
15        Cruze   Chevrolet   12363    14565   (2,202)        -15%   
16         ix35     Hyundai   11738     9658     2,080         22%   
17        Focus        Ford   10923    22278  (11,355)        -51%   
18      Corolla      Toyota   10461     7714     2,747         36%   
19        Camry      Toyota   10338    10074       264          3%   
20     Sportage         KIA    9979    10358     (379)         -4%   
21        Astra        Opel    9901    12080   (2,179)        -18%   
22         Juke      Nissan    9589     7750     1,839         24%   
23    Outlander  Mitsubishi    9447     8015     1,432         18%   
24      X-Trail      Nissan    9177     8767       410          5%   
25         Lada       11860   14951  (3,091)         1      Granta   
26      Hyundai        9086    8590      496         2     Solaris   
27          KIA        5999    7159  (1,160)         3     New Rio   
28      Renault        4390    4012      378         4      Duster   
29      Renault        4376    5553  (1,177)         5      Kalina   
..          ...         ...     ...      ...       ...         ...   
191     Hyundai        2698    2668       30        21    Sportage   
192      Toyota        2599    3155    (556)        22     Corolla   
193          VW        2560    1989      571        23       Focus   
194       Mazda        2124    1977      147        24   Outlander   
195   Chevrolet        2034    3808  (1,774)        25       Astra   
196        Lada       16924   14743    2,181         1      Granta   
197     Hyundai       10001   10676    (675)         2     Solaris   
198         KIA        6384    8632  (2,248)         3     New Rio   
199        Lada        5705    5305      400         4      Duster   
200     Renault        5652    6815  (1,163)         5      Kalina   
201     Renault        5640    4149    1,491         6      Largus   
202        Lada        5387    6895  (1,508)         7        Polo   
203        Lada        4257    5319  (1,062)         8       Logan   
204          VW        4053    6160  (2,107)         9      Priora   
205        Lada        3556    3162      394        10      Almera   
206     Renault        2863    3544    (681)        11         4x4   
207  Mitsubishi        2822    2303      519        12        Niva   
208      Nissan        2785    1992      793        13  Octavia A7   
209         KIA        2783    2845     (62)        14       RAV 4   
210   Chevrolet        2769    4512  (1,743)        15     Sandero   
211     Hyundai        2728    3371    (643)        16        ix35   
212       Skoda        2690       0    2,690        17       Camry   
213      Toyota        2670    2860    (190)        18       Cruze   
214      Toyota        2669    3050    (381)        19     Qashqai   
215       Skoda        2630    1750      880        20     Corolla   
216      Nissan        2494    3222    (728)        21   New Cee'd   
217      Nissan        2478    3807  (1,329)        22       Focus   
218        Opel        2219     948    1,271        23    Sportage   
219      Toyota        2169    3555  (1,386)        24       Astra   
220   Chevrolet        2088    5070  (2,982)        25   Outlander   

         2014m3  2013m3  u1413m3    1413m3       Datem  
0         13077   15596  (2,519)      -16%   30-4-2014  
1          9774   10553    (779)       -7%   30-4-2014  
2          9045    8430      615        7%   30-4-2014  
3          7606    7600        6        0%   30-4-2014  
4          7731    8857  (1,126)      -13%   30-4-2014  
5          5964    6637    (673)      -10%   30-4-2014  
6          5889    4209    1,680       40%   30-4-2014  
7          5212    4962      250        5%   30-4-2014  
8          5798     483    5,315     1100%   30-4-2014  
9          4983    5724    (741)      -13%   30-4-2014  
10         3796    4890  (1,094)      -22%   30-4-2014  
11         3796    4084    (288)       -7%   30-4-2014  
12         3753       0      NaN       NaN   30-4-2014  
13         3784    3808     (24)       -1%   30-4-2014  
14         4391    4974    (583)      -12%   30-4-2014  
15         3014    4284  (1,270)      -30%   30-4-2014  
16         3119    2030    1,089       54%   30-4-2014  
17         2549    5546  (2,997)      -54%   30-4-2014  
18         2450    2418       32        1%   30-4-2014  
19         2987    2822      165        6%   30-4-2014  
20         2526    2857    (331)      -12%   30-4-2014  
21         2049    3221  (1,172)      -36%   30-4-2014  
22         2837    1657    1,180       71%   30-4-2014  
23         1526    2447    (921)      -38%   30-4-2014  
24         1436    1614    (178)      -11%   30-4-2014  
25         Lada   95154   113738  (18,584)   31-8-2014  
26      Hyundai   74438    75081     (643)   31-8-2014  
27          KIA   60032    59046       986   31-8-2014  
28      Renault   51137    53611   (2,474)   31-8-2014  
29         Lada   44175    43767       408   31-8-2014  
..          ...     ...      ...       ...         ...  
191         KIA   23901    27157   (3,256)  31-10-2014  
192      Toyota   23782    24355     (573)  31-10-2014  
193        Ford   22526    54713  (32,187)  31-10-2014  
194  Mitsubishi   20857    20461       396  31-10-2014  
195        Opel   19623    33995  (14,372)  31-10-2014  
196        Lada  112078   128481  (16,403)   30-9-2014  
197     Hyundai   84439    85757   (1,318)   30-9-2014  
198         KIA   66416    67678   (1,262)   30-9-2014  
199     Renault   56789    60426   (3,637)   30-9-2014  
200        Lada   49880    49072       808   30-9-2014  
201        Lada   47529    40402     7,127   30-9-2014  
202          VW   44558    53368   (8,810)   30-9-2014  
203     Renault   40365    38341     2,024   30-9-2014  
204        Lada   35192    44602   (9,410)   30-9-2014  
205      Nissan   33942     7846    26,096   30-9-2014  
206        Lada   29384    38100   (8,716)   30-9-2014  
207   Chevrolet   28875    38574   (9,699)   30-9-2014  
208       Skoda   27344     4429    22,915   30-9-2014  
209      Toyota   26746    29981   (3,235)   30-9-2014  
210     Renault   26728    32490   (5,762)   30-9-2014  
211     Hyundai   25330    24254     1,076   30-9-2014  
212      Toyota   24708    26092   (1,384)   30-9-2014  
213   Chevrolet   22896    42660  (19,764)   30-9-2014  
214      Nissan   22388    26744   (4,356)   30-9-2014  
215      Toyota   22000    20820     1,180   30-9-2014  
216         KIA   21412    24485   (3,073)   30-9-2014  
217        Ford   20689    50406  (29,717)   30-9-2014  
218         KIA   20582    24464   (3,882)   30-9-2014  
219        Opel   18014    30157  (12,143)   30-9-2014  
220  Mitsubishi   17574    17451       123   30-9-2014  

[221 rows x 11 columns]

Впечатление такое, что с мая в исходных файлах был изменен порядок столбцов. Так что надо посмотерь исходник (pdf)

In [ ]:
#eng_car-sales-in-august-2014.csv
"1","Granta","Lada","11,860","14,951","(3,091)","1","Granta","Lada","95,154","113,738","(18,584)",
"2","Solaris","Hyundai","9,086","8,590","496","2","Solaris","Hyundai","74,438","75,081","(643)",
"3","New Rio","KIA","5,999","7,159","(1,160)","3","New Rio","KIA","60,032","59,046","986",
...
"24","Patriot","UAZ","1,963","1,427","536","24","Astra","Opel","16,539","26,346","(9,807)",
"25","CX-5","Mazda","1,790","1,789","1","25","CX-5","Mazda","15,047","11,575","3,472",
In [ ]:
# eng_car-sales-in-may-2014.csv
"1","Lada","Granta","12,947","14,471","-1,524","-11%","58,517","67,236","-8,719","-13%",
"2","Hyundai","Solaris","9,791","10,493","-702","-7%","45,009","46,434","-1,425","-3%",
"3","KIA","New Rio","8,513","7,978","535","7%","38,484","36,189","2,295","6%",
...
"24","Mitsubishi","Outlander","1,469","1,812","-343","-19%","10,916","9,827","1,089","11%",
"25","Nissan","Juke","1,242","2,111","-869","-41%","10,831","9,861","970","10%",

Итак, мы видим, что файлы считываются в алфавитном порядке... и выше мы получили отличный пример "перемешивания столбцов".
Очевидно, в данном случае алгоритмы пакетной обработки файлов в папке вообще не подходят. Одна настройка чего стоит. Проще перебрать файлы вручную. Так и поступим.

Но для этого нужно уметь:

In [ ]:
0. Читать все столбцы
1. Переставлят столбцы
2. Переименовывать столбцы
3. Дописывать столбцы в файл

Хорошо, что не написал сразу "в Pandas"... пожалуй, переставлять проще, а все остальное под вопросом... Потому в учебных целях будем все делать двумя способами... Преимущество оставим за Padas, поскольку мы должны быть уверены, что итоговые файлы Padas откроет...

In [23]:
filen = []
for csvfile in os.listdir(DIRPATH):
    filen.append(DIRPATH + csvfile)
In [34]:
#filename = DIRPATH + 'eng_car-sales-in-may-2014.csv'
filename = filen[5]
with open(filename, 'r') as f:
    print(filename.split('/')[-1])
    print( '---')
    print(f.readline())
eng_car-sales-in-may-2014.csv
---
"1","Lada","Granta","12,947","14,471","-1,524","-11%","58,517","67,236","-8,719","-13%",

In [40]:
names=COLNAMES,
In [47]:
#import pdb; pdb.set_trace()  #Если раскоментировать, то можно испоьзовать паузы    
#pdall =  pd.DataFrame()
for csvfile in os.listdir(DIRPATH):
    if csvfile.startswith(filterfilenames):
        csvfile_path = os.path.join(DIRPATH, csvfile)
        
        pdtemp = pd.read_csv(csvfile_path, error_bad_lines=False, \
                             na_values=['-','n/a'], \
                             quotechar='"', sep=',', thousands=',')
        #pdtemp['Datem'] = addDatem(csvfile)                          #Закомментировать 
        #pdall = pd.concat([pdall, pdtemp], ignore_index=True)        #Закомментировать
        #pd.set_option('display.max_columns'= 9, False)
        pd.set_option('display.width', 1000)
        print (csvfile)
        print (len(pdtemp.columns)) 
        print (pdtemp).head(3)
        print (pdtemp).tail(2)
        #pdtemp.info()
        print (' ')
#print(pdall)                                                         #Закомментировать       
eng_car-sales-in-april-2014.csv
12
   1   Granta     Lada  45570  52765 (7,195) -14%  13077  15596 (2,519) -16%  Unnamed: 11
0  2  Solaris  Hyundai  35218  35941   (723)  -2%   9774  10553   (779)  -7%          NaN
1  3  New Rio      KIA  29971  28211   1,760   6%   9045   8430     615   7%          NaN
2  4   Duster  Renault  28153  25945   2,208   9%   7606   7600       6   0%          NaN
     1     Granta        Lada  45570  52765 (7,195) -14%  13077  15596 (2,519)  -16%  Unnamed: 11
22  24  Outlander  Mitsubishi   9447   8015   1,432  18%   1526   2447   (921)  -38%          NaN
23  25    X-Trail      Nissan   9177   8767     410   5%   1436   1614   (178)  -11%          NaN
 
eng_car-sales-in-august-2014.csv
13
   1   Granta     Lada  11,860  14,951  (3,091)  1.1 Granta.1   Lada.1  95,154  113,738 (18,584)  Unnamed: 12
0  2  Solaris  Hyundai    9086    8590      496    2  Solaris  Hyundai   74438    75081    (643)          NaN
1  3  New Rio      KIA    5999    7159  (1,160)    3  New Rio      KIA   60032    59046      986          NaN
2  4    Logan  Renault    4390    4012      378    4   Duster  Renault   51137    53611  (2,474)          NaN
     1   Granta   Lada  11,860  14,951 (3,091)  1.1 Granta.1 Lada.1  95,154  113,738 (18,584)  Unnamed: 12
22  24  Patriot    UAZ    1963    1427     536   24    Astra   Opel   16539    26346  (9,807)          NaN
23  25     CX-5  Mazda    1790    1789       1   25     CX-5  Mazda   15047    11575    3,472          NaN
 
eng_car-sales-in-december-2014.csv
13
   1   Granta     Lada  13,405  12,923      482  1.1 Granta.1   Lada.1  152,810  166,951 (14,141)  Unnamed: 12
0  2  Solaris  Hyundai    9502    8824      678    2  Solaris  Hyundai   114644   113991      653          NaN
1  3  New Rio      KIA    9298    6917    2,381    3  New Rio      KIA    93648    89788    3,860          NaN
2  4   Duster  Renault    6562    7976  (1,414)    4   Duster  Renault    76138    83702  (7,564)          NaN
     1 Granta   Lada  13,405  12,923    482  1.1 Granta.1  Lada.1  152,810  166,951 (14,141)  Unnamed: 12
22  24   CX-5  Mazda    3281    2196  1,085   24  Corolla  Toyota    27704    30644  (2,940)          NaN
23  25  Mokka   Opel    3121    1260  1,861   25     CX-5   Mazda    24953    19725    5,228          NaN
 
eng_car-sales-in-july-2014.csv
13
   1   Granta     Lada  11,819  14,542  (2,723)  1.1 Granta.1   Lada.1  83,294  98,787 (15,493)  Unnamed: 12
0  2  Solaris  Hyundai    9778    9482      296    2  Solaris  Hyundai   65352   66491  (1,139)          NaN
1  3  New Rio      KIA    6853    7651    (798)    3  New Rio      KIA   54033   51887    2,146          NaN
2  4   Duster  Renault    5694    7348  (1,654)    4   Duster  Renault   46761   48058  (1,297)          NaN
     1   Granta    Lada  11,819  14,542  (2,723)  1.1   Granta.1      Lada.1  83,294  98,787 (15,493)  Unnamed: 12
22  24  Qashqai  Nissan    2017    3242  (1,225)   24      Astra        Opel   15019   22532  (7,513)          NaN
23  25    Mokka    Opel    1938     490    1,448   25  Outlander  Mitsubishi   13545   13079      466          NaN
 
eng_car-sales-in-june-2014.csv
12
   1     Lada   Granta  12,958  17,009 (4,051) -24%  71,475  84,245 (12,770) -15%  Unnamed: 11
0  2  Hyundai  Solaris   10565   10575    (10)   0%   55574   57009  (1,435)  -3%          NaN
1  3      KIA  New Rio    8696    8047     649   8%   47180   44236    2,944   7%          NaN
2  4     Lada   Largus    6981    5034   1,947  39%   34920   24702   10,218  41%          NaN
     1   Lada Granta  12,958  17,009 (4,051) -24%  71,475  84,245 (12,770) -15%  Unnamed: 11
22  24  Mazda   CX-5    2063    1656     407  25%   14450    8164    6,286  77%          NaN
23  25     VW  Jetta    2038    1792     246  14%   10932   10636      296   3%          NaN
 
eng_car-sales-in-may-2014.csv
12
   1     Lada   Granta  12,947  14,471  -1,524 -11%  58,517  67,236  -8,719 -13%  Unnamed: 11
0  2  Hyundai  Solaris    9791   10493    -702  -7%   45009   46434   -1425  -3%          NaN
1  3      KIA  New Rio    8513    7978     535   7%   38484   36189    2295   6%          NaN
2  4     Lada   Largus    7448    5289    2159  41%   27939   19668    8271  42%          NaN
     1        Lada     Granta  12,947  14,471  -1,524  -11%  58,517  67,236  -8,719 -13%  Unnamed: 11
22  24  Mitsubishi  Outlander    1469    1812    -343  -19%   10916    9827    1089  11%          NaN
23  25      Nissan       Juke    1242    2111    -869  -41%   10831    9861     970  10%          NaN
 
eng_car-sales-in-november-2014.csv
13
   1  New Rio      KIA  10,834  7,038    3796  1.1   Granta     Lada  139,405  154,028 (14623)  Unnamed: 12
0  2   Granta     Lada   10520  12190  (1670)    2  Solaris  Hyundai   105142   105167    (25)          NaN
1  3  Solaris  Hyundai   10134   9672     462    3  New Rio      KIA    84350    82871    1479          NaN
2  4    Logan  Renault    7152   4036    3116    4   Duster  Renault    69576    75726  (6150)          NaN
     1 New Rio  KIA  10,834  7,038    3796  1.1   Granta    Lada  139,405  154,028  (14623)  Unnamed: 12
22  24   Jetta   VW    2543   1432    1111   24    Focus    Ford    24104    59552  (35448)          NaN
23  25     New  KIA    2542   3833  (1291)   25  X-Trail  Nissan    22251    24021   (1770)          NaN
 
eng_car-sales-in-october-2014.csv
13
   1   Granta     Lada  16,807  13,357    3,450  1.1 Granta.1   Lada.1  128,885  141,838 (12,953)  Unnamed: 12
0  2  Solaris  Hyundai   10569    9738      831    2  Solaris  Hyundai    95008    95495    (487)          NaN
1  3  New Rio      KIA    7100    8155  (1,055)    3  New Rio      KIA    73516    75833  (2,317)          NaN
2  4   Largus     Lada    6561    5765      796    4   Duster  Renault    62567    68163  (5,596)          NaN
     1 Granta       Lada  16,807  13,357    3,450  1.1   Granta.1      Lada.1  128,885  141,838  (12,953)  Unnamed: 12
18  24   CX-5      Mazda    2124    1977      147   24  Outlander  Mitsubishi    20857    20461       396          NaN
19  25  Cruze  Chevrolet    2034    3808  (1,774)   25      Astra        Opel    19623    33995  (14,372)          NaN
 
eng_car-sales-in-september-2014.csv
13
   1   Granta     Lada  16,924  14,743    2,181  1.1 Granta.1   Lada.1  112,078  128,481 (16,403)  Unnamed: 12
0  2  Solaris  Hyundai   10001   10676    (675)    2  Solaris  Hyundai    84439    85757  (1,318)          NaN
1  3  New Rio      KIA    6384    8632  (2,248)    3  New Rio      KIA    66416    67678  (1,262)          NaN
2  4   Kalina     Lada    5705    5305      400    4   Duster  Renault    56789    60426  (3,637)          NaN
     1   Granta       Lada  16,924  14,743    2,181  1.1   Granta.1      Lada.1  112,078  128,481  (16,403)  Unnamed: 12
22  24  Corolla     Toyota    2169    3555  (1,386)   24      Astra        Opel    18014    30157  (12,143)          NaN
23  25    Cruze  Chevrolet    2088    5070  (2,982)   25  Outlander  Mitsubishi    17574    17451       123          NaN
 
In [88]:
COLNAMES_0_11 =['Model', 'Brandt', \
           '2014y3', '2013y3', 'u1413y3', '1413y3', \
           '2014m3', '2013m3', 'u1413m3', '1413m3', 'Datem']
In [91]:
pdall011 = pd.DataFrame(columns=COLNAMES_0_11)
for csvfile in os.listdir(DIRPATH):
    if csvfile.startswith(filterfilenames):
        csvfile_path = os.path.join(DIRPATH, csvfile)
        
        pdtemp = pd.read_csv(csvfile_path, error_bad_lines=False, \
                             names=COLNAMES_0_11, na_values=['-','n/a'], \
                             quotechar='"', sep=',', thousands=',')     
        
        if pdtemp.columns[''] == 12:
            
            #pdtemp['Datem'] = addDatem(csvfile)                          
            
            print (csvfile)
            print (len(pdtemp.columns)) 
            print (pdtemp).head(3)
            print (pdtemp).tail(2)
            #pdtemp.info()
            print (' ')
            pdall011 = pd.concat([pdall011, pdtemp], ignore_index=True) 
            pd.set_option('display.width', 1000)
In [80]:
pdall011.shape, '    number of rows: ' ,pdall011.shape[0],' or: ', len(pdall011.index)
Out[80]:
((72, 40), '    number of rows: ', 72, ' or: ', 72)
In [81]:
pdtemp.shape, '    number of columns: ' ,pdtemp.shape[1],' or: ', len(pdtemp.columns)
Out[81]:
((24, 13), '    number of columns: ', 13, ' or: ', 13)
In [86]:
pdtemp.icol(0), pdtemp.irow(0)
Out[86]:
(0      2
 1      3
 2      4
 3      5
 4      6
 5      7
 6      8
 7      9
 8     10
 9     11
 10    12
 11    13
 12    14
 13    15
 14    16
 15    17
 16    18
 17    19
 18    20
 19    21
 20    22
 21    23
 22    24
 23    25
 Name: 1, dtype: int64, 1                    2
 Granta         Solaris
 Lada           Hyundai
 16,924           10001
 14,743           10676
 2,181            (675)
 1.1                  2
 Granta.1       Solaris
 Lada.1         Hyundai
 112,078          84439
 128,481          85757
 (16,403)       (1,318)
 Unnamed: 12        NaN
 Name: 0, dtype: object)
In [93]:
pdall011.shape
Out[93]:
(0, 11)
In [95]:
pdall011.icol(0).name
Out[95]:
'Model'
In [101]:
pdtemp.columns.get_loc("Model")  # Номер столбца по имени
Out[101]:
0
In [97]:
pdtemp.info
Out[97]:
<bound method DataFrame.info of                     Model  Brandt  2014y3   2013y3  u1413y3      1413y3      2014m3  2013m3  u1413m3    1413m3  Datem
1  Granta            Lada   16924   14743    2,181        1      Granta        Lada  112078   128481  (16,403)    NaN
2  Solaris        Hyundai   10001   10676    (675)        2     Solaris     Hyundai   84439    85757   (1,318)    NaN
3  New Rio            KIA    6384    8632  (2,248)        3     New Rio         KIA   66416    67678   (1,262)    NaN
4  Kalina            Lada    5705    5305      400        4      Duster     Renault   56789    60426   (3,637)    NaN
5  Duster         Renault    5652    6815  (1,163)        5      Kalina        Lada   49880    49072       808    NaN
6  Logan          Renault    5640    4149    1,491        6      Largus        Lada   47529    40402     7,127    NaN
7  4x4               Lada    5387    6895  (1,508)        7        Polo          VW   44558    53368   (8,810)    NaN
8  Largus            Lada    4257    5319  (1,062)        8       Logan     Renault   40365    38341     2,024    NaN
9  Polo                VW    4053    6160  (2,107)        9      Priora        Lada   35192    44602   (9,410)    NaN
10 Priora            Lada    3556    3162      394       10      Almera      Nissan   33942     7846    26,096    NaN
11 Sandero        Renault    2863    3544    (681)       11         4x4        Lada   29384    38100   (8,716)    NaN
12 Outlander   Mitsubishi    2822    2303      519       12        Niva   Chevrolet   28875    38574   (9,699)    NaN
13 Almera          Nissan    2785    1992      793       13  Octavia A7       Skoda   27344     4429    22,915    NaN
14 New Cee'd          KIA    2783    2845     (62)       14       RAV 4      Toyota   26746    29981   (3,235)    NaN
15 Niva         Chevrolet    2769    4512  (1,743)       15     Sandero     Renault   26728    32490   (5,762)    NaN
16 ix35           Hyundai    2728    3371    (643)       16        ix35     Hyundai   25330    24254     1,076    NaN
17 Rapid            Skoda    2690       0    2,690       17       Camry      Toyota   24708    26092   (1,384)    NaN
18 Camry           Toyota    2670    2860    (190)       18       Cruze   Chevrolet   22896    42660  (19,764)    NaN
19 RAV 4           Toyota    2669    3050    (381)       19     Qashqai      Nissan   22388    26744   (4,356)    NaN
20 Octavia A7       Skoda    2630    1750      880       20     Corolla      Toyota   22000    20820     1,180    NaN
21 X-Trail         Nissan    2494    3222    (728)       21   New Cee'd         KIA   21412    24485   (3,073)    NaN
22 Qashqai         Nissan    2478    3807  (1,329)       22       Focus        Ford   20689    50406  (29,717)    NaN
23 Mokka             Opel    2219     948    1,271       23    Sportage         KIA   20582    24464   (3,882)    NaN
24 Corolla         Toyota    2169    3555  (1,386)       24       Astra        Opel   18014    30157  (12,143)    NaN
25 Cruze        Chevrolet    2088    5070  (2,982)       25   Outlander  Mitsubishi   17574    17451       123    NaN>
In [106]:
pdtemp.info()
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 25 entries, (1, Granta) to (25, Cruze)
Data columns (total 11 columns):
Model      25 non-null object
Brandt     25 non-null int64
2014y3     25 non-null int64
2013y3     25 non-null object
u1413y3    25 non-null int64
1413y3     25 non-null object
2014m3     25 non-null object
2013m3     25 non-null int64
u1413m3    25 non-null int64
1413m3     25 non-null object
Datem      0 non-null float64
dtypes: float64(1), int64(5), object(5)
memory usage: 2.0+ KB
In [108]:
pdtemp.dtypes
Out[108]:
Model       object
Brandt       int64
2014y3       int64
2013y3      object
u1413y3      int64
1413y3      object
2014m3      object
2013m3       int64
u1413m3      int64
1413m3      object
Datem      float64
dtype: object
In [111]:
pdtemp.icol(0)
Out[111]:
1   Granta              Lada
2   Solaris          Hyundai
3   New Rio              KIA
4   Kalina              Lada
5   Duster           Renault
6   Logan            Renault
7   4x4                 Lada
8   Largus              Lada
9   Polo                  VW
10  Priora              Lada
11  Sandero          Renault
12  Outlander     Mitsubishi
13  Almera            Nissan
14  New Cee'd            KIA
15  Niva           Chevrolet
16  ix35             Hyundai
17  Rapid              Skoda
18  Camry             Toyota
19  RAV 4             Toyota
20  Octavia A7         Skoda
21  X-Trail           Nissan
22  Qashqai           Nissan
23  Mokka               Opel
24  Corolla           Toyota
25  Cruze          Chevrolet
Name: Model, dtype: object
In [114]:
pdtemp.index
Out[114]:
MultiIndex(levels=[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], [u'4x4', u'Almera', u'Camry', u'Corolla', u'Cruze', u'Duster', u'Granta', u'Kalina', u'Largus', u'Logan', u'Mokka', u'New Cee'd', u'New Rio', u'Niva', u'Octavia A7', u'Outlander', u'Polo', u'Priora', u'Qashqai', u'RAV 4', u'Rapid', u'Sandero', u'Solaris', u'X-Trail', u'ix35']],
           labels=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], [6, 22, 12, 7, 5, 9, 0, 8, 16, 17, 21, 15, 1, 11, 13, 24, 20, 2, 19, 14, 23, 18, 10, 3, 4]])
In [99]:
col0 = pdtemp.icol(0)
In [100]:
col0.get_dtype_counts
Out[100]:
<bound method Series.get_dtype_counts of 1   Granta              Lada
2   Solaris          Hyundai
3   New Rio              KIA
4   Kalina              Lada
5   Duster           Renault
6   Logan            Renault
7   4x4                 Lada
8   Largus              Lada
9   Polo                  VW
10  Priora              Lada
11  Sandero          Renault
12  Outlander     Mitsubishi
13  Almera            Nissan
14  New Cee'd            KIA
15  Niva           Chevrolet
16  ix35             Hyundai
17  Rapid              Skoda
18  Camry             Toyota
19  RAV 4             Toyota
20  Octavia A7         Skoda
21  X-Trail           Nissan
22  Qashqai           Nissan
23  Mokka               Opel
24  Corolla           Toyota
25  Cruze          Chevrolet
Name: Model, dtype: object>
In [103]:
col0.get_dtype_counts()
Out[103]:
object    1
dtype: int64

Ох уж это этот апрель! Оказывается, столбцы переставляли как минимум два раза - в мае и июне.

Отметим между делом, что в одних и тех же столбцах есть и знаки минус и скобки, эти столбцы скорее всего будут прочитаны, как строуовые...



Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий