1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/it-ebooks-pandas-cookbook-code-notes

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
1.md 19 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 01:15 e628503

Глава 01. Pandas основы

По сравнению с 《Использование Python для анализа данных》, основной особенностью этой книги является то, что все операции были разбиты на отдельные действия, и каждое из них подробно объясняется. Однако текст немного многословен, а в Jupyter Notebook есть некоторые ошибки. Я объединил и обобщил их.

После первого редактирования всё ещё остаётся много недостатков, которые необходимо исправить.


Автор Theodore Petrou, основатель Dunder Data

Сайт компании: http://www.dunderdata.com (dunder — это жидкость, которая остаётся после дистилляции рома, название выбрано по аналогии с процессом анализа данных). Адрес GitHub: https://github.com/tdpetrou. Личная страница на LinkedIn: https://www.linkedin.com/in/tedpetrou. Твиттер: https://twitter.com/tedpetrou?lang=en. Блог на Medium: https://medium.com/@petrou.theodore.


# Импорт pandas и numpy по соглашению
in[1]: import pandas as pd
       import numpy as np

1. Структура DataFrame

# Установка максимального количества столбцов и строк
 in[2]: pd.set_option('max_columns', 8, 'max_rows', 10)
# Чтение csv-файла с помощью метода read_csv()
# Метод head() позволяет просмотреть первые пять строк, head(n) — первые n строк
 in[3]: movie = pd.read_csv('data/movie.csv')
       movie.head()
out[3]:

2. Доступ к компонентам DataFrame

in[4]: # Извлечение индекса столбцов
       columns = movie.columns
       # Извлечение индекса строк
       index = movie.index
       # Извлечение данных
       data = movie.values
 in[5]: columns
out[5]: Index(['color', 'director_name', 'num_critic_for_reviews', 'duration',
       'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name',
       'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name',
       'movie_title', 'num_voted_users', 'cast_total_facebook_likes',
       'actor_3_name', 'facenumber_in_poster', 'plot_keywords',
       'movie_imdb_link', 'num_user_for_reviews', 'language', 'country',
       'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes',
       'imdb_score', 'aspect_ratio', 'movie_facebook_likes'],
      dtype='object')
 in[6]: index
out[6]: RangeIndex(start=0, stop=4916, step=1)
 in[7]: data
out[7]: array([['Color', 'James Cameron', 723.0, ..., 7.9, 1.78, 33000],
       ['Color', 'Gore Verbinski', 302.0, ..., 7.1, 2.35, 0],
       ['Color', 'Sam Mendes', 602.0, ..., 6.8, 2.35, 85000],
       ...,
       ['Color', 'Benjamin Roberds', 13.0, ..., 6.3, nan, 16],
       ['Color', 'Daniel Hsia', 14.0, ..., 6.3, 2.35, 660],
       ['Color', 'Jon Gunn', 43.0, ..., 6.6, 1.85, 456]], dtype=object)
 in[8]: # Тип индекса
        type(index) # pandas.core.indexes.range.RangeIndex
out[8]: pandas.core.indexes.range.RangeIndex
 in[9]: # Тип столбцов
        type(columns) # pandas.core.indexes.base.Index
out[9]: pandas.core.indexes.base.Index
 in[10]: # Тип данных
         type(data) # numpy.ndarray
out[10]: numpy.ndarray
 in[11]: # Проверка на подтип
         issubclass(pd.RangeIndex, pd.Index) # True
out[11]: True

Дополнительно

 in[12]: # Доступ к значениям индекса
         index.values
         # Значения индекса представляют собой список, поэтому можно индексировать или нарезать
         index.values[0]
out[12]: array([   0,    1,    2, ..., 4913, 4914, 4915])
 in[13]: # Доступ к значениям столбцов
         columns.values
out[13]: array(['color', 'director_name', 'num_critic_for_reviews', 'duration',
       'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name',
       'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name',
       'movie_title', 'num_voted_users', 'cast_total_facebook_likes',
       'actor_3_name', 'facenumber_in_poster', 'plot_keywords',
       'movie_imdb_link', 'num_user_for_reviews', 'language', 'country',
       'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes',
       'imdb_score', 'aspect_ratio', 'movie_facebook_likes'], dtype=object)

3. Понимание типов данных

 in[14]: movie = pd.read_csv('data/movie.csv')
         # Типы каждой колонки
 in[15]: movie.dtypes
out[15]: color                       object
         director_name               object
         num_critic_for_reviews     float64
         duration                   float64
         director_facebook_likes    float64
                                     ...
         title_year                 float64 ```
actor_2_facebook_likes     float64
imdb_score                 float64
aspect_ratio               float64
movie_facebook_likes         int64
Length: 28, dtype: object

4. Выбор одной колонки данных в качестве Series

in[17]: movie = pd.read_csv('data/movie.csv')
in[18]: # выбор director_name этой колонки
    movie['director_name']
out[18]: 0           James Cameron
    1          Gore Verbinski
    2              Sam Mendes
    3       Christopher Nolan
    4             Doug Walker
        ...
    4911          Scott Smith
    4912                  NaN
    4913     Benjamin Roberds
    4914          Daniel Hsia
    4915             Jon Gunn
    Name: director_name, Length: 4916, dtype: object
in[19]: # также можно выбрать через атрибут
    movie.director_name
out[19]: 0           James Cameron
    1          Gore Verbinski
    2              Sam Mendes
    3       Christopher Nolan
    4             Doug Walker
        ...
    4911          Scott Smith
    4912                  NaN
    4913     Benjamin Roberds
    4914          Daniel Hsia
    4915             Jon Gunn
    Name: director_name, Length: 4916, dtype: object
# просмотр типа
in[20]: type(movie['director_name'])
out[20]: pandas.core.series.Series

Больше

in[21]: director = movie['director_name']
    # просмотр имени выбранной колонки
    director.name
out[21]: 'director_name'
in[22]: # преобразование одноколоночной Series в DataFrame
    director.to_frame().head()
out[22]:
    director_name
0   James Cameron
1   Gore Verbinski
2   Sam Mendes
3   Christopher Nolan
4   Doug Walker

5. Вызов методов Series

Подготовка

in[23]: # просмотр всех уникальных методов Series
    s_attr_methods = set(dir(pd.Series))
    # размер этого множества
    len(s_attr_methods)
out[23]: 442
in[24]: # просмотр всех уникальных методов DataFrame
    df_attr_methods = set(dir(pd.DataFrame))
    len(df_attr_methods)
out[24]: 445
in[25]: # сколько общих методов у этих двух множеств
    len(s_attr_methods & df_attr_methods)
out[25]: 376

Принцип

in[26]: # выбрать director и actor_1_fb_likes две колонки
    movie = pd.read_csv('data/movie.csv')
    director = movie['director_name']
    actor_1_fb_likes = movie['actor_1_facebook_likes']
# просмотр заголовка
in[27]: director.head()
out[27]: 0        James Cameron
    1       Gore Verbinski
    2           Sam Mendes
    3    Christopher Nolan
    4          Doug Walker
    Name: director_name, dtype: object
in[28]: actor_1_fb_likes.head()
out[28]: 0     1000.0
    1    40000.0
    2    11000.0
    3    27000.0
    4      131.0
    Name: actor_1_facebook_likes, dtype: float64
in[29]: # подсчёт отдельно
    pd.set_option('max_rows', 8)
    director.value_counts()
out[29]: Steven Spielberg    26
    Woody Allen         22
    Clint Eastwood      20
    Martin Scorsese     20
                              ..
    James Nunn           1
    Gerard Johnstone     1
    Ethan Maniquis       1
    Antony Hoffman       1
    Name: director_name, Length: 2397, dtype: int64
in[30]: actor_1_fb_likes.value_counts()
out[30]: 1000.0     436
    11000.0    206
    2000.0     189
    3000.0     150
                  ... 
    216.0        1
    859.0        1
    225.0        1
    334.0        1
    Name: actor_1_facebook_likes, Length: 877, dtype: int64
in[31]: director.size
out[31]: 4916
in[32]: director.shape
out[33]: (4916,)
in[33]: len(director)
out[33]: 4916
in[34]: # сколько непустых значений у director
    director.count()
out[34]: 4814 # это означает, что есть 102 пропущенных значения
in[35]: # сколько непустых значений у actor_1_fb_likes
    actor_1_fb_likes.count()
out[35]: 4909
in[36]: # медиана actor_1_fb_likes
    actor_1_fb_likes.quantile()
out[36]: 982.0 ```
(0.0, 640000.0, 6494.488490527602, 982.0, 15106.986883848309, 31881444.0)

count      4909.000000
mean       6494.488491
std       15106.986884
min           0.000000
25%         607.000000
50%         982.000000
75%       11000.000000
max      640000.000000
Name: actor_1_facebook_likes, dtype: float64

count                 4814
unique                2397
top       Steven Spielberg
freq                    26
Name: director_name, dtype: object

510.0

0.1      240.0
0.2      510.0
0.3      694.0
0.4      854.0
...   
0.6     1000.0
0.7     8000.0
0.8    13000.0
0.9    18000.0
Name: actor_1_facebook_likes, Length: 9, dtype: float64

0       False
1       False
2       False
3       False
...  
4912     True
4913    False
4914    False
4915    False
Name: director_name, Length: 4916, dtype: bool

4916

4909

Steven Spielberg    0.005401
Woody Allen         0.004570
Clint Eastwood      0.004155
Martin Scorsese     0.004155
...   
James Nunn          0.000208
Gerard Johnstone    0.000208
Ethan Maniquis      0.000208
Antony Hoffman      0.000208
Name: director_name, Length: 2397, dtype: float64

True

0        True
1        True
2        True
3        True
...  
4912    False
4913     True
4914     True
4915     True
Name: director_name, Length: 4916, dtype: bool
5 + 9 = 14

4 ** 2 = 16

a = 10

5 <= 9 # Истина

'abcde' + 'fg' = 'abcdefg'

not (5 <= 9) # Ложно

7 in [1, 2, 6] # Ложно

set([1,2,3]) & set([2,3,4]) = {2, 3}

[1, 2, 3] - 3 # Ошибка

а = set([1,2,3]); а[0] # Ошибка
imdb_score = movie['imdb_score']
imdb_score
``` **imdb_score + 1**

|   | imdb_score |
|:--:|:----------:|
|0  | 8.9        |
|1  | 8.1        |
|2  | 7.8        |
|...| ...        |
|4913| 7.3       |
|4914| 7.3        |
|4915| 7.6        |

**每列值乘以2.5**

|   | imdb_score * 2.5 |
|:--:|:----------------:|
|0  | 19.75           |
|1  | 17.75            |
|2  | 17               |
|...| ...              |
|4913| 15.75         |
|4914| 15.75          |
|4915| 16.50          |

**每列值除以7的余数**

|   | imdb_score // 7 |
|:--:|:--------------:|
|0  | 1              |
|1  | 1               |
|2  | 0               |
|...| ...             |
|4913| 0             |
|4914| 0              |
|4915| 0              |

**判断是否大于7**

|   | imdb_score > 7 |
|:--:|:-------------:|
|0  | True          |
|1  | True            |
|2  | False          |
|...| ...           |
|4913| False         |
|4914| False        |
|4915| False      |

**判断是否等于字符串**

|   | director == 'James Cameron' |
|:--:|:----------------------------:|
|0  | True                         |
|1  | False                        |
|2  | False                       |
|...| ...                          |
|4913| False                     |
|4914| False                   |
|4915| False               |

*И так далее.*

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

Текст запроса не содержит контекста или дополнительной информации, поэтому перевод выполнен без изменений. ### Больше

Доля пропущенных значений

actor_1_fb_likes.isnull().mean()

```0.0014239218877135883```

Использование скобок для конкатенации

(actor_1_fb_likes.fillna(0) .astype(int) .head())


0 1000 1 40000 2 11000 3 27000 4 131 Name: actor_1_facebook_likes, dtype: int64


## 8. Придание смысла индексу

set_index() присваивает строкам индекс

In[83]: movie = pd.read_csv('data/movie.csv') In[84]: movie.shape Out[84]: (4916, 28) In[85]: movie2 = movie.set_index('movie_title') movie2 Out[85]:


![](img/85d16064cd712b848496703ee5e4f929.png)

Присвоение имени через index_col

In[86]: pd.read_csv('data/movie.csv', index_col='movie_title') Out[86]:


![](img/85d16064cd712b848496703ee5e4f929.png)

### Больше

Восстановление индекса

In[87]: movie2.reset_index()


## 9. Переименование строк и столбцов

Переименование с помощью rename()

In[88]: movie = pd.read_csv('data/movie.csv', index_col='movie_title') In[89]: idx_rename = {'Avatar':'Ratava', 'Spectre': 'Ertceps'} col_rename = {'director_name':'Director Name', 'num_critic_for_reviews': 'Critical Reviews'} In[90]: movie.rename(index=idx_rename, columns=col_rename).head() Out[90]:


![](img/52372ae82b4dcce84298b59fafaea1eb.png)

### Больше

In[91]: movie = pd.read_csv('data/movie.csv', index_col='movie_title') index = movie.index columns = movie.columns

index_list = index.tolist()
column_list = columns.tolist()

index_list[0] = 'Ratava'
index_list[2] = 'Ertceps'
column_list[1] = 'Director Name'
column_list[2] = 'Critical Reviews'

In[92]: print(index_list[:5]) ['Ratava', "Pirates of the Caribbean: At World's End", 'Ertceps', 'The Dark Knight Rises', 'Star Wars: Episode VII - The Force Awakens']

In[93]: print(column_list) ['color', 'Director Name', 'Critical Reviews', 'duration', 'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name', 'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name', 'num_voted_users', 'cast_total_facebook_likes', 'actor_3_name', 'facenumber_in_poster', 'plot_keywords', 'movie_imdb_link', 'num_user_for_reviews', 'language', 'country', 'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes', 'imdb_score', 'aspect_ratio', 'movie_facebook_likes']

In[94]: movie.index = index_list movie.columns = column_list

In[95]: movie.head() Out[95]:


![](img/57fa0424cbd5b44509a08312bda35a7b.png)

## 10. Создание и удаление столбцов

Добавление нового столбца через [имя столбца]

In[96]: movie = pd.read_csv('data/movie.csv') In[97]: movie['has_seen'] = 0 In[98]: movie.columns Out[98]: Index(['color', 'director_name', 'num_critic_for_reviews', 'duration', 'director_facebook_likes', 'actor_3_facebook_likes', 'actor_2_name', 'actor_1_facebook_likes', 'gross', 'genres', 'actor_1_name', 'movie_title', 'num_voted_users', 'cast_total_facebook_likes', 'actor_3_name', 'facenumber_in_poster', 'plot_keywords', 'movie_imdb_link', 'num_user_for_reviews', 'language', 'country', 'content_rating', 'budget', 'title_year', 'actor_2_facebook_likes', 'imdb_score', 'aspect_ratio', 'movie_facebook_likes', 'has_seen'], dtype='object')

Назначение значений новому столбцу

In[99]: movie['actor_director_facebook_likes'] = (movie['actor_1_facebook_likes'] + movie['actor_2_facebook_likes'] + movie['actor_3_facebook_likes'] + movie['director_facebook_likes']) In[100]: movie['actor_director_facebook_likes'].isnull().sum() Out[100]: 122

Проверка всех значений с помощью all()

In[101]: movie['actor_director_facebook_likes'] = movie['actor_director_facebook_likes'].fillna(0) In[102]: movie['is_cast_likes_more'] = (movie['cast_total_facebook_likes'] >= movie['actor_director_facebook_likes']) In[103]: movie['is_cast_likes_more'].all() Out[103]: False

In[104]: movie = movie.drop('actor_director_facebook_likes', axis='columns')

In[105]: movie['actor_total_facebook_likes'] = (movie['actor_1_facebook_likes'] + movie['actor_2_facebook_likes'] + movie['actor_3_facebook_likes'])

      movie['actor_total_facebook_likes'] = movie['actor_total_facebook_likes'].fillna(0)

In[106]: movie['is_cast_likes_more'] = movie['cast_total_facebook_likes'] >=
movie['actor_total_facebook_likes']

      movie['is_cast_likes_more'].all()

Out[106]: True


```py
In[107]: movie['pct_actor_cast_like'] = (movie['actor_total_facebook_likes'] / 
                                movie['cast_total_facebook_likes'])

In[108]: movie['pct_actor_cast_like'].min(), movie['pct_actor_cast_like'].max() 
Out[108]: (0.0, 1.0)

In[109]: movie.set_index('movie_title')['pct_actor_cast_like'].head()
Out[109]: 
movie_title
Avatar                                        0.577369
Pirates of the Caribbean: At World's End      0.951396
Spectre                                       0.987521
The Dark Knight Rises                         0.683783
Star Wars: Episode VII - The Force Awakens    0.000000
Name: pct_actor_cast_like, dtype: float64

Больше

# Использование метода insert() для вставки столбца на месте
In[110]: profit_index = movie.columns.get_loc('gross') + 1
          profit_index

In[111]: movie.insert(loc=profit_index,
                 column='profit',
                 value=movie['gross'] - movie['budget'])

In[112]: movie.head()
Out[112]: 

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/it-ebooks-pandas-cookbook-code-notes.git
git@api.gitlife.ru:oschina-mirror/it-ebooks-pandas-cookbook-code-notes.git
oschina-mirror
it-ebooks-pandas-cookbook-code-notes
it-ebooks-pandas-cookbook-code-notes
master