Знакомство с 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()])
Результат работы скрипта: