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

пятница, 10 апреля 2015 г.

Продолжаем пробовать шаблон (1) конкатенции таблиц (Pandas) с данными aerbu февраля и марта 2014

В предыдущем посте мы создали файл, в котором склеены только девять месяцев 2014 года. А первых трех другой формат. Здесь я попробовал тот же шаблон для февраля и марта.
Объект DataFrame (pdall) сформировался с ошибкамии -в столбцы попали данные разных форматов из-за ошибки парсера в строке *"Mercedes-Benz Vans","771","473","63%","459","279","65%", ** Потому этот подход показался неудобным, как и сам шаблон.
Сначала "ставим задачу", потом последовательно выполняем в итераторе импорт файлов со столбцами "Brandt 2014y 2013y 1413y 2014m 2013m 1413m Datem", добавляем столбец, читстим и преобразуем два столбца object в Float64, преобразуем строки в даты... Сохраняем все на диск и в инфо-файл.

01.Импортируем модули и библиотеки

In [12]:
import os
import pandas as pd

02. Зададим все константы в этом разделе (дописывать только сюда)

In [15]:
# Path to dir with files Must end with traling slash '/'
DIRPATH = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/feb1/'

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

# Filter only filenames with
#filterfilenames = 'eng_car-sales-in'
In [30]:
# При считывании каждого файла во фрейм нужно будет добавлять столбец дат, 
# для этого мы используем список и словарь:
months = ['january', 'febrary', 'march', 'april', 'may', 'jun',
        'july', 'august','september', 'october','november', 'december']
    
dict = {'january':'31-1', 'february':'28-2', 'march':'31-1',
        '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'}
In [17]:
# Path to save dir for new fles Must end with traling slash '/'
#DIRPATH = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1aug2/'
newpath = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/'

#COLNAMES =['Brandt', '2014y', '2013y', '1413y', '2014m', '2013m', '1413m', 'Datem']

1. Выбор исходных данных. Рабочие папки с файлами, просмотрим и решим, что делать?

В предыдущем посте на эту тему мы закончили тем, что создали папку и записали в нее два файла, однако главный файл не записался. Потому из предыдущего поста убираем все лишнее, чтобы сделать шаблон для работы

In [1]:
!ls /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new
2014.csv  2014_info.txt
In [ ]:
# %load /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/2014_info.txt
resources folder: /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv
filters:   if csvfile.startswith filterfilenames = 'eng_car-sales-in'
concatent sourcefiles: 9 
eng_car-sales-in-april-2014.csv
eng_car-sales-in-august-2014.csv
eng_car-sales-in-december-2014.csv
eng_car-sales-in-july-2014.csv
eng_car-sales-in-june-2014.csv
eng_car-sales-in-may-2014.csv
eng_car-sales-in-november-2014.csv
eng_car-sales-in-october-2014.csv
eng_car-sales-in-september-2014.csv

headers:   COLNAMES =['Brandt', '2014y', '2013y', '1413y', '2014m', '2013m', '1413m', 'Datem'] 
results:   newpath = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/2014.txt'    
help:      [Первый рабочий пример конкатенции таблиц с преобразованием форматов столбцов object -> float]
           http://pythonr.blogspot.ru/2015/04/object-float.html
weblog:    http://pythonr.blogspot.com/2015/04/1-pandas-aerbu-2014.html
In [5]:
#Выберем два файла за февраль и март
!ls /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1feb
eng_car-sales-in-april-2014.csv     eng_car-sales-in-october-2014.csv
eng_car-sales-in-august-2014.csv    eng_car-sales-in-september-2014.csv
eng_car-sales-in-december-2014.csv  sales-in-december_2013_eng_final.csv
eng_car-sales-in-july-2014.csv     sales-in-february_2014_eng_final.csv
eng_car-sales-in-june-2014.csv     sales-in-january_2014_eng_final_1.csv
eng_car-sales-in-may-2014.csv     sales-in-march_2014_eng_final.csv
eng_car-sales-in-november-2014.csv

Как для них подобрать фильтр? Не могу сообразить, потому просто задам список:

In [8]:
listdir = ['/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1feb/sales-in-february_2014_eng_final.csv', 
           '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1feb/sales-in-march_2014_eng_final.csv']
In [ ]:
####2 Куда и как будем сохранять результаты 

2.1 Подготовим информационный файл (вот в такой вид), но сохраним его в последнюю очередь.

In [ ]:
# Don`t forget to create folder 
!mkdir /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new

Этот код запустить после всех исправелний и проверок. Сюда мы переходим после того, как сформирован и почищен объект pdall.

In [61]:
%%file /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/2014_2_3_info.txt
resources folder: /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv
filters:   if csvfile.startswith filterfilenames = 'eng_car-sales-in'
concatent sourcefiles: 2
'/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1feb/'sales-in-february_2014_eng_final.csv',
'/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1feb/sales-in-march_2014_eng_final.csv'

headers:   COLNAMES =['Brandt', '2014y', '2013y', '1413y', '2014m', '2013m', '1413m', 'Datem'] 
results:   newpath = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/2014_2_3.txt'    
help:      [Первый рабочий пример конкатенции таблиц с преобразованием форматов столбцов object -> float]
           http://pythonr.blogspot.ru/2015/04/object-float.html
weblog:    http://pythonr.blogspot.com/2015/04/1-pandas-aerbu-2014.html
Writing /media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/2014_2_3_info.txt

2.2 Проверим опции для сохранения объекта pdall в файл, но выполним код в ячейках в предпоследнюю очередь.

In [ ]:
# Path to dir with files
#DIRPATH = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1aug2/'
#newpath = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new'
# Columns in pdall
#COLNAMES =['Brandt', '2014y', '2013y', '1413y', '2014m', '2013m', '1413m', 'Datem']
In [59]:
print newpath
print COLNAMES
/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv_new/
['Brandt', '2014y', '2013y', '1413y', '2014m', '2013m', '1413m', 'Datem']
In [60]:
pdall.to_csv(newpath + '2014_2_3.txt', 
        sep=';', 
        #float_format='%.8f',
        columns=COLNAMES,
        index=False)

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

3. Просмотрим файлы в папке с исходными файлами и выберем подходящие

Сначала получим список файлов, его можно распечатать, а можно загнать в список(?) Чтобы потом легче было просмтривать здесь или вызывать.

In [9]:
#filelist =[]
for csvfile in  listdir:     #os.listdir(DIRPATH):
#if csvfile.startswith('eng_car-sales-in'):
    print  csvfile
    # fullcsvfile = DIRPATH + csvfile
    #filelist.append(fullcsvfile)
/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1feb/sales-in-february_2014_eng_final.csv
/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1feb/sales-in-march_2014_eng_final.csv

Тест: просмотреть файлы можно здесь (для этого надо раскомментировать три строки в коде выше)

Можно все просматривать старым дедовским способом - при помощи текстового редактора. Можно импортировать таблицу в объект DataFrame Pandas, но, как показывает опыт - объект может просто не открыться... , наконец, можно в цикле загрузить все в отдельную Notebook... из всех этих идей здесь пробуем вот такой вариант:

In [ ]:
%load filelist['0'] 

4. Настроим фильтры для отбора исходных файлов в папке

Не надо забывать про проект правил, там все написано Проект соглашения с самим собой об обработки файлов таблиц AEBto3tables

Здесь можно проверять варианты фильтров, а константы надо записывать в начало поста, вот, что я уже использовал **# Filter only filenames with filterfilenames = 'eng_car-sales-in'** Этаконстанта есть в начале.

5. В процессе просмотра сюда копируем проблемные фрагмены

Фрагменты строк с проблемами для последующего планирования чистки

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%",

Смотрим на строки... и планируем все действия. На первый раз я просто выделил два класса задач и записал только эту:

Сделать при импорте файла в DataFrame

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

In [ ]:
# Заменить все "-", "n/a"  одним  Nan
# Убрать запятые- разделители разрядов "12,625" - coma
# Учесть, что каждое значение в кавычках '"'

Сделать обработку столбцов

  1. Добавить новый столбец даты, а дату взять из имени файла,
  2. Убрать в двух столбцах % и конвертировать значения в числа. При этом надо было проконтролироать отрицательные значения, не убрались ли "неодинокие" знаки "минус".

Далее мы возвращаемся к параметрам импорта

Соберем их здесь все вместе, пока не знаю точно, вставлять ли их в инфо-файл, но я чуть не забыл "В первом файле убрать строку заголовков !!!!! "

In [ ]:
Часть имени для фильтра     Да
Строки                      В первом файле убрать строку заголовков !!!!! 
Количество строк            Неодинаковое число строк в фалах
Пропуск плохихи строк       error_bad_lines=False
Nan                         na_values=['-','n/a']
CSV                         quotechar='"', sep=',', 
Разделитель разрядов        thousands=','

6. Теперь каждый файл читаем в цикле и сначала распечатываем, что получилось, а потом осуществляем конкатенцию

In [ ]:
# Для длинных файлов можно использовать такую печать
print (csvfile)
pdtemp.head(5)
print '...'
pdtemp.tail(3)

Поскольку это не боевой код, а скорее учебный, то я позволю себе такой убогий прием, как комментирование-раскомментирование строк. Комментари исправа омечают, как Раскоментировать для печати

Почему я документирую столь примитивный код? Потому, что в дальнейшем не хочу думать, надеюсь просто тупо выполнять элементарные действия.

6.0 Прежде, чем запускать это код надо выполнить метод addDatem() в ячейке под этой

Если сразу все не распечатается,то код используем для пофайловой отладки (печати)

In [54]:
#import pdb; pdb.set_trace()  #Если раскоментировать, то можно испоьзовать паузы    
pdall =  pd.DataFrame()
for csvfile in listdir:  #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)                                                         #Закомментировать       
                  Brandt  2014y  2013y 1413y  2014m  2013m 1413m      Datem
0                   Lada  54543  66947  -19%  30896  36910  -16%  28-2-2014
1               Renault*  29615  30040   -1%  16721  15299    9%  28-2-2014
2                Nissan*  28209  22051   28%  17158  13126   31%  28-2-2014
3               Hyundai*  24945  24795    1%  13901  13489    3%  28-2-2014
4                    KIA  24502  25153   -3%  13303  14094   -6%  28-2-2014
5              Chevrolet  21868  22565   -3%  12448  13023   -4%  28-2-2014
6                Toyota*  20211  15197   33%  11892   8337   43%  28-2-2014
7                     VW  19989  22468  -11%  11390  12500   -9%  28-2-2014
8             Mitsubishi  11824  10021   18%   6817   6001   14%  28-2-2014
9                  Škoda  11128  10946    2%   6384   6323    1%  28-2-2014
10                  Opel  10891  12385  -12%   6610   7174   -8%  28-2-2014
11                 Ford*  10556  13415  -21%   6306   7051  -11%  28-2-2014
12                Daewoo   8254  12490  -34%   4536   6797  -33%  28-2-2014
13              GAZ LCV*   7787  10154  -23%   4527   6046  -25%  28-2-2014
14                 Mazda   6747   5513   22%   3899   3442   13%  28-2-2014
15         Mercedes-Benz   6230   4957   26%   3520   3055   15%  28-2-2014
16                   BMW   5896   5256   12%   3356   3085    9%  28-2-2014
17                  UAZ*   5104   7075  -28%   2903   4169  -30%  28-2-2014
18                  Audi   4528   4525    0%   2905   2800    4%  28-2-2014
19                 Honda   4413   2824   56%   2484   1615   54%  28-2-2014
20              Peugeot*   4197   5241  -20%   2354   2903  -19%  28-2-2014
21              Citroёn*   3912   3795    3%   2192   2214   -1%  28-2-2014
22             SsangYong   3337   4437  -25%   2007   2584  -22%  28-2-2014
23                Suzuki   3189   3699  -14%   1707   2201  -22%  28-2-2014
24                 Chery   2846   2552   12%   1709   1521   12%  28-2-2014
25                 Geely   2845   2323   22%   1687   1506   12%  28-2-2014
26            Land Rover   2789   2326   20%   1867   1511   24%  28-2-2014
27                 Lifan   2666   2297   16%   1548   1454    6%  28-2-2014
28            Great Wall   2334   2845  -18%   1402   1565  -10%  28-2-2014
29                Subaru   2312   2221    4%   1374   1357    1%  28-2-2014
..                   ...    ...    ...   ...    ...    ...   ...        ...
86                Subaru   3723   4009   -7%   1411   1788  -21%  31-1-2014
87                 Lexus   3375   3212    5%   1954   1568   25%  31-1-2014
88              VW vans*   3281   3466   -5%   1274   1466  -13%  31-1-2014
89                 Volvo   3242   2908   11%   1697   1512   12%  31-1-2014
90              Infiniti   2338   2819  -17%   1034   1268  -18%  31-1-2014
91                  Jeep   1857    845  120%    828    449   84%  31-1-2014
92                 FIAT*   1755   1244   41%    767    564   36%  31-1-2014
93   Mercedes-Benz Vans*   1510    835   81%    739    362  104%  31-1-2014
94                  FAW*    787    506   56%    251    231    9%  31-1-2014
95               Porsche    710    777   -9%    410    338   21%  31-1-2014
96                Jaguar    406    321   26%    155    129   20%  31-1-2014
97                  MINI    400    559  -28%    170    243  -30%  31-1-2014
98                  BAW*    354    483  -27%    123    195  -37%  31-1-2014
99              Cadillac    339    378  -10%    162    154    5%  31-1-2014
100                 SEAT    309    860  -64%    125    358  -65%  31-1-2014
101                  ZAZ    296    930  -68%     82    374  -78%  31-1-2014
102             Changan3    195    NaN   NaN    145    NaN   NaN  31-1-2014
103                Haima     90     83    8%     49      7  600%  31-1-2014
104                smart     72     24  200%     35     12  192%  31-1-2014
105               Bogdan     92    777  -88%     22    215  -90%  31-1-2014
106               Isuzu*     56     23  143%     23     12   92%  31-1-2014
107               Luxgen     42    NaN   NaN     15    NaN   NaN  31-1-2014
108               TagAZ*     38     64  -41%     10     21  -52%  31-1-2014
109             Chrysler     36     39   -8%     15     16   -6%  31-1-2014
110                  Izh     18    251  -93%      3     93  -97%  31-1-2014
111                Dodge      9     51  -82%      3     23  -87%  31-1-2014
112               Foton*      7      6   17%      2      0   NaN  31-1-2014
113          Alfa Romeo2      3    NaN   NaN      3    NaN   NaN  31-1-2014
114                  BYD      0    100   NaN      0      6   NaN  31-1-2014
115               Vortex      0    517   NaN      0    235   NaN  31-1-2014

[116 rows x 8 columns]

6.1. Тест: После того, как объект pdall сформирован, проверим визуально

In [ ]:
# Как сформирован столбец дат, мы его сами слепили...
# Как осуществлена конкатенция

Для справки: метод addDatem()

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

Для справки: Тест для addDatem. Можно проверить, как все работает

In [31]:
csvfilet = 'sales-in-february_2014_eng_final.csv'   #'eng_car-sales-in-april-2014.csv'
addDatem(csvfile)
Out[31]:
'28-2-2014'

7 Выполнить только если использовал выше дебаггер и хочешь сохранить его записи выше.

Точнее, если выше пришлось изменить код и печатать исходные файлы, а не создавать обект pdall, то здесь создадим и распечатаем этот pdall.

In [ ]:
#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)                                                         #Закомментировать       
In [ ]:
####Итак, все исходные файлы теперь в одном объекте. начнем чистить и преобразовывать столбцы

8. Удалить '%' и сменить формат на числовой (Важно! )

У нас осталось две строки процентов, надо убрать из них знаки "%" и перевести в формат float ИЗ Python for Data Analysis
Часть данных имеет вид целых, а в части есть 888.555 точка. В процессе предыдущих экспериментов я пытался все перевести в формат Int, но мне не попадались дроби..., только посмотрев (распечатав выше) все данные, понял, почему выскакивала ошибка.
Так что просто выполним код:

In [33]:
pdall['1413y'] = pdall['1413y'].str.replace('%','').astype(float)
pdall['1413m'] = pdall['1413m'].str.replace('%','').astype(float)

Тест Важно! тип столбцов должен быть "float64" (а был "object")

pdall.info(verbose=True, buf=None, max_cols=None, memory_usage=True, null_counts=True)

Почему "2014m 116 non-null object" ...?... смотрим внимательно на распечатку столбцов. Ага, там пробел в качестве разделителя разрядов.

9. Пробуем убрать пробелы в столбце и конвертировать строки в числа

И вот, что происходит, если в столбец попадает не числовой, а строковый элемент (36). Обратите внимвние, после того, как строковый элемент в столбце "пройден", команда смены типа проходит. В нижней части столбца пробелов нет, а в вверхней есть.

In [52]:
# Тест 
pdall['2014y'][0:3].str.replace(' ','').astype(float)
pdall['2014y'][30:85]
Out[52]:
30    2 007
31    1 545
32    1 421
33    1 304
34    1 029
35      988
36    Vans*
37      536
38      300
39      251
40      231
41      230
42      214
43      184
44      177
45       70
46       41
47       37
48       33
49       28
50       27
51       21
52       15
53        6
54        5
55        0
56        0
57    91603
58    46252
59    45744
60    42289
61    41307
62    35307
63    35057
64    34331
65    21842
66    18892
67    18000
68    17373
69    14044
70    12858
71    11610
72    10384
73     9700
74     8466
75     8286
76     6789
77     6777
78     6239
79     5733
80     5130
81     4951
82     4903
83     4851
84     4605
Name: 2014y, Length: 55, dtype: object

Распечатаем строку с ошибкой

Очевидно, что это последствие ошибки парсера, который разделил "Mercedes-Benz", "Vans*",... и все сдвинулось...

In [53]:
pdall.ix[35:37]
Out[53]:
Brandt 2014y 2013y 1413y 2014m 2013m 1413m Datem
35 FIAT* 988 680 45% 581 389 49% 28-2-2014
36 Mercedes-Benz Vans* 771 473 63% 459 279 28-2-2014
37 FAW* 536 275 95% 234 207 13% 28-2-2014

Просто исправим ошибку в исходном файле *"Mercedes-Benz Vans","771","473","63%","459","279","65%", ** и перезапустим итератор, проверка типов показала, что теперь все в норме. Снова выполняем:

In [56]:
pdall['1413y'] = pdall['1413y'].str.replace('%','').astype(float)
pdall['1413m'] = pdall['1413m'].str.replace('%','').astype(float)

На этот раз ошибки нет. Посмотрим типы данных в столбцах

In [57]:
pdall.info(verbose=True, buf=None, max_cols=None, memory_usage=True, null_counts=True)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 116 entries, 0 to 115
Data columns (total 8 columns):
Brandt    116 non-null object
2014y     116 non-null int64
2013y     112 non-null float64
1413y     108 non-null float64
2014m     116 non-null int64
2013m     112 non-null float64
1413m     107 non-null float64
Datem     116 non-null object
dtypes: float64(4), int64(2), object(2)
memory usage: 7.2+ KB

II Если мы хотим редактировать или использовать столбец дат

In [ ]:
#### Тест: Конвертация строки в объект даты 
In [14]:
pd.to_datetime(pdall.Datem).tail()  # ==   pd.to_datetime(pd001['Datem'])
Out[14]:
560   2014-09-30
561   2014-09-30
562   2014-09-30
563   2014-09-30
564   2014-09-30
Name: Datem, dtype: datetime64[ns]

II.1 Теперь можно изменить столбец Datem (осторожно, лучше просто создать копию !!!):

In [15]:
pdall.Datem = pd.to_datetime(pdall.Datem) #pd.Datem(pd001.dat)  # ==   pd.to_datetime(pd001['dat'])

Если мы записываем промежуточный файл, то менять формат категорически не рекомендуется. Мы можем забыть, что что-то изменили...

III Проверка результатов (перед сохранением в файл)

Осталось проверить trailing spaces, но Pandas за такимим мелочами следит сам (в чем я не уверен)

III Тест_1: Визуальный контроль фрагментов

In [58]:
pdall.head(), pdall[30:40], pdall.tail(5)
Out[58]:
(     Brandt  2014y  2013y  1413y  2014m  2013m  1413m      Datem
 0      Lada  54543  66947    -19  30896  36910    -16  28-2-2014
 1  Renault*  29615  30040     -1  16721  15299      9  28-2-2014
 2   Nissan*  28209  22051     28  17158  13126     31  28-2-2014
 3  Hyundai*  24945  24795      1  13901  13489      3  28-2-2014
 4       KIA  24502  25153     -3  13303  14094     -6  28-2-2014,
                  Brandt  2014y  2013y  1413y  2014m  2013m  1413m      Datem
 30             VW vans*   2007   2000      0   1058   1300    -19  28-2-2014
 31                Volvo   1545   1396     11   1143   1059      8  28-2-2014
 32                Lexus   1421   1644    -14    714    866    -18  28-2-2014
 33             Infiniti   1304   1551    -16    833    926    -10  28-2-2014
 34                 Jeep   1029    396    160    609    250    144  28-2-2014
 35                FIAT*    988    680     45    581    389     49  28-2-2014
 36  Mercedes-Benz Vans*    771    473     63    459    279     65  28-2-2014
 37                 FAW*    536    275     95    234    207     13  28-2-2014
 38              Porsche    300    439    -32    174    263    -34  28-2-2014
 39               Jaguar    251    192     31    157    122     29  28-2-2014,
           Brandt  2014y  2013y  1413y  2014m  2013m  1413m      Datem
 111        Dodge      9     51    -82      3     23    -87  31-1-2014
 112       Foton*      7      6     17      2      0    NaN  31-1-2014
 113  Alfa Romeo2      3    NaN    NaN      3    NaN    NaN  31-1-2014
 114          BYD      0    100    NaN      0      6    NaN  31-1-2014
 115       Vortex      0    517    NaN      0    235    NaN  31-1-2014)

III Тест_2: Контроль форматов столбцов

In [ ]:
pdall.info(verbose=True, buf=None, max_cols=None, memory_usage=True, null_counts=True)

Осталось только сохранить объект Dateframe в файл

Для это не мешкая вернемся к пп.2 обязательно проверим, отредактируем параметры записи и запишем два файла: Сначала сохраним объект pdall в файл csv, Потом запишем информационный файл.



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

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

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