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

среда, 12 февраля 2014 г.

Видеоролик: как использовать Panadas для работы с CSV файлом

После длиннющих мануалов мне так понравилось начало этого видеоролика, что я скачал похожий файл (baby-names.csv) и решил поупражняться вместе с автором видео. Пока не знаю, подойдет ли файл... имена в Великобритании. Здесь я попробовал (наконец-то) использовать относительный путь при импорте csv файла в объект (frameset)Pandas (см. In[4])
In [1]:
from IPython.display import YouTubeVideo
YouTubeVideo('p8hle-ni-DM')
Out[1]:
In [2]:
from pandas import *
In [3]:
from pylab import *
In [4]:
names=read_csv('../data/baby-names.csv')
In [5]:
names.head()
Out[5]:
year name percent sex
0 1880 John 0.081541 boy
1 1880 William 0.080511 boy
2 1880 James 0.050057 boy
3 1880 Charles 0.045167 boy
4 1880 George 0.043292 boy
5 rows × 4 columns
Файл в ролике почти такой же, но у него 5 полей: "year, name,prop,sex, soundex" - 4+1 индекс... и записей (строк) сотни тысяч... А этот, похоже, без столбца "sounde"

Можно вырыезать фрагмент только из определенных строк и столбцов

In [6]:
# slice operation
names[3:9]
Out[6]:
year name percent sex
3 1880 Charles 0.045167 boy
4 1880 George 0.043292 boy
5 1880 Frank 0.027380 boy
6 1880 Joseph 0.022229 boy
7 1880 Thomas 0.021401 boy
8 1880 Henry 0.020641 boy
6 rows × 4 columns
In [10]:
# slicing by row and columns
names.ix[2:4,['year','name']]
Out[10]:
year name
2 1880 James
3 1880 Charles
4 1880 George
3 rows × 2 columns

Можно отфильтровать часть столбца

In [12]:
#create girl names and boy names data sets
names['sex']=='girl'
Out[12]:
0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8     False
9     False
10    False
11    False
12    False
13    False
14    False
...
257985    True
257986    True
257987    True
257988    True
257989    True
257990    True
257991    True
257992    True
257993    True
257994    True
257995    True
257996    True
257997    True
257998    True
257999    True
Name: sex, Length: 258000, dtype: bool

Можно задать новые объекты (например, сформировать таблицу только мужских имен)

In [13]:
# make two subsets (lists) from names (list)
girl_names=names[names['sex']=='girl']
boy_names=names[names['sex']=='boy']
In [15]:
boy_names.tail()
Out[15]:
year name percent sex
128995 2008 Kolten 0.000090 boy
128996 2008 Damari 0.000089 boy
128997 2008 Hugh 0.000089 boy
128998 2008 Jensen 0.000089 boy
128999 2008 Yurem 0.000089 boy
5 rows × 4 columns
In [14]:
girl_names.head()
Out[14]:
year name percent sex
129000 1880 Mary 0.072381 girl
129001 1880 Anna 0.026678 girl
129002 1880 Emma 0.020521 girl
129003 1880 Elizabeth 0.019865 girl
129004 1880 Minnie 0.017888 girl
5 rows × 4 columns

Можно выбрать только строки с именем John

In [18]:
#create dataset with only John records
john=boy_names[boy_names['name']=='John']
In [19]:
john.head()
Out[19]:
year name percent sex
0 1880 John 0.081541 boy
1000 1881 John 0.080975 boy
2000 1882 John 0.078314 boy
3000 1883 John 0.079066 boy
4000 1884 John 0.076476 boy
5 rows × 4 columns
In [20]:
john=john.ix[0:,['year','percent']]
In [26]:
john=john.set_index(['year'])
In [36]:
john.sum()
Out[36]:
percent    5.299585
dtype: float64
В видеоролике далее строится диаграмма (график) год-процент..., а здесь эта команда не проходит. Ответ я нашел здесь in Ipython notebook, Pandas is not displying the graph I try to plot При попытке исправления бага произошел сбой.
Далее я решил описать три способа устранения ошибки графика - надо подгрузить библиотеку одним из трех способов:
In [40]:
# 3) использовать .show() 
import matplotlib.pyplot as plt
In [*]:
plt.show()
In []:
# 1) Запускать notebook с опцией
ipython notebook --pylab=inline
In [3]:
# 2) Или использовать 
%pylab inline
Populating the interactive namespace from numpy and matplotlib

In [1]:
john.plot()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-a742cb2a5d3b> in <module>()
----> 1 john.plot()

NameError: name 'john' is not defined
После перезагрузки ядра надо повторять все команды... Я лучше напишу еще один пост с другим видео этого автора. Так что графика здесь не будет.


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

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

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