13 декабря 2019 г. 23:46

294

Знакомство с pandas

Pandas - это Python библиотека для обработки и анализа данных. Эта библиотека построена поверх библотеки NumPy, которая написана на С и славится своим быстройдествием.

Pandas - использует две структуры данных:

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


import pandas as pd
s = pd.Series(['a', 'b', 'c', 'd', 'e'])
s2 = pd.Series([9, 8, 7, 6])

DataFrame - это двумерная структура , которая состоит из столбцов и строк

DataFrame можно создать из словаря , из двумерных массивов , из других DataFrame и т.д.

Допустим у нас есть словарь книг , где есть названия и авторы. И из этого словаря можно создать DataFrame следующим образом:


import pandas as pd

books = {
    "title": ["Anna Karenina", "Madame Bovary", "War and Peace",
              "The Great Gatsby", "The Brothers Karamazov"],
    "author": ["Leo Tolstoy", "Gustave Flaubert", "Leo Tolstoy",
               "F. Scott Fitzgerald", "Fyodor Dostoyevsky"],
}

df = pd.DataFrame(books)
print(df)

Те же самые данные , но при этом структорой данных является список , каждый элемент которого является словарем


import pandas as pd


books = [
    {"title": "Anna Karenina", "author": "Leo Tolstoy"},
    {"title": "Madame Bovary", "author": "Gustave Flaubert"},
    {"title": "War and Peace", "author": "Leo Tolstoy"},
    {"title": "The Great Gatsby", "author": "F. Scott Fitzgerald"},
    {"title": "The Brothers Karamazov", "author": "Fyodor Dostoyevsky"},
]

df = pd.DataFrame(books)
print(df)

Результат вывода:


 

Если у нас есть список названий книг и отдельно список авторов , то мы можем создать DataFrame следующим образом.


import pandas as pd

titles = ["Anna Karenina", "Madame Bovary", "War and Peace", "The Great Gatsby", "The Brothers Karamazov"]
authors = ["Leo Tolstoy", "Gustave Flaubert", "Leo Tolstoy", "F. Scott Fitzgerald", "Fyodor Dostoyevsky"]


df = pd.DataFrame(list(zip(titles, authors)), columns=["Title","Author"])
print(df)

Обратите внимание , что мы еще указываем columns. Если мы этого не сделаем , то будут выводится числовые индексы

Давайте DataFrame запишем в csv файл. В pandas это делается очень легко


import pandas as pd


books = [
    {"title": "Anna Karenina", "author": "Leo Tolstoy"},
    {"title": "Madame Bovary", "author": "Gustave Flaubert"},
    {"title": "War and Peace", "author": "Leo Tolstoy"},
    {"title": "The Great Gatsby", "author": "F. Scott Fitzgerald"},
    {"title": "The Brothers Karamazov", "author": "Fyodor Dostoyevsky"},
]

df = pd.DataFrame(books)
print(df)
df.to_csv("books.csv", sep=',')

Также Pandas позволяе читать данные из файлов в DataFrame. Прочитаем данные в новый DataFrame из созданного выше файла books.csv и


import pandas as pd

new_df = pd.read_csv("books.csv")

# Определяем размерность DataFrame c помощью свойства shape
print(new_df.shape)

rows, columns = new_df.shape
print("{} строк и {} столбцов".format(rows, columns))

# С помощью метода head(n) покажем n первых строк. Где n - целое число
print(new_df.head(2))

# C помощью метода tail(n) покажем n последних строк
print(new_df.tail(2))

Операция агрегирования


import pandas as pd

cities = [
    {"name": "Москва", "population": 12678},
    {"name": "Санкт-Петербург", "population": 5398},
    {"name": "Новосибирск", "population": 1625},
    {"name": "Казань", "population": 1257},
    {"name": "Ростов-на-Дону", "population": 1137},
    {"name": "Уфа", "population": 1128},
    {"name": "Екатеринбург", "population": 1493},
    {"name": "Волгоград", "population": 1008},
    {"name": "Самара", "population": 1156},
    {"name": "Омск", "population": 1154}
]
df = pd.DataFrame(cities)

# Выведем все города , где население больше 2 миллионов человек
print("Выведем все города , где население больше 2 миллионов человек")
print(df[df["population"] > 2000])

# Выведем город-миллионник с самым меньшим населением
print("Выведем город-миллионник с самым меньшим населением")
print(df[df["population"] == df["population"].min()])

# Выведем город-миллионник с самым большим населением
print("Выведем город-миллионник с самым большим населением")
print(df[df["population"] == df["population"].max()])


Результат работы скрипта:

​​​​​​​
comments powered by Disqus