Чтение и запись данных

В библиотеке pandas реализованы функции чтения табличных данных в объект DataFrame. В таблице pandas:rwdata:tbl:1 представлены некоторые из таких функций.

Таблица 7. Функции чтения данных

Функция Описание
read_csv Загружает разделенные значения из файла или файлоподобного объекта; в качестве разделителя по умолчанию используется запятая
read_table Загружает разделенные значения из файла или файлоподобного объекта; в качестве разделителя по умолчанию используется табуляция ('\t')
read_fwf Читает данные в формате со столбцами фиксированной длины (без разделителей)
read_clipboard Версия функции read_table, которая читает данные из буфера обмена
read_excel Читает данные из файлов формата .xls или .xlsx
read_hdf Читает файлы вормата HDF5, записанные с помощью библиотеки pandas
read_html Читает все таблицы из заданного документа HTML
read_json Читает данные из JSON (JavsScript Object Notation)
read_msgpack Читает данные pandas закодированные с помощью двоичного формата MessagePack
read_pickle Читает любой объект, сохраненный в формате Python pickle
read_sas Читает набор данных SAS, хранящийся в одном из пользовательских форматов хранения системы SAS
read_sql Читает результат запроса SQL (используя SQLAlchemy) как объект DataFrame

Библиотека pandas поддерживает нативную работу со многими реляционными БД.

Можно не только загружать данные из локальных файлов, но и из Интернета — достаточно вместо адреса на локальном компьютере указать прямю ссылку на файл.

Также существует дополнительный пакет, который называется pandas_datareader. Если он не установлен, его можно установить через conda или pip. Он загружает данные из некоторых источников. Загрузим с помощью pandas_datareader некоторые данные для некоторых биржевых тикеров:

import pandas_datareader.data as web

all_data = {ticker: web.get_data_yahoo(ticker)
            for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']}
price = pd.DataFrame({ticker: data['Adj Close']
                      for ticker, data in all_data.items()})
volume = pd.DataFrame({ticker: data['Volume']
                       for ticker, data in all_data.items()})

Вычислим изменение процентные изменения цен:

In [199]: returns = price.pct_change()

In [200]: returns.tail()
Out[200]: 
                AAPL       IBM      MSFT      GOOG
Date                                              
2020-03-23 -0.021244 -0.006500 -0.009975 -0.014641
2020-03-24  0.100325  0.113011  0.090896  0.073669
2020-03-25 -0.005509  0.003508 -0.009573 -0.028181
2020-03-26  0.052623  0.066509  0.062551  0.053751
2020-03-27 -0.041402 -0.043051 -0.041061 -0.043934

Метод corr объекта Series вычисляет корреляцию перекрывающихся, выровненных по индексу значений в двух объектах Series. Соответственно cov вычисляет ковариацию:

In [202]: returns['MSFT'].corr(returns['IBM'])
Out[202]: 0.5840961357368786

In [203]: returns['MSFT'].cov(returns['IBM'])
Out[203]: 0.00015025941925307093

Поскольку MSFT является допустимым атрибутом Python, мы также можем выбрать эти столбцы, используя более краткий синтаксис

In [204]: returns.MSFT.corr(returns.IBM)
Out[204]: 0.5840961357368786

Методы corr и cov объекта DataFrame возвращают полные матрицы корреляции или ковариации:

In [205]: returns.corr()
Out[205]: 
          AAPL       IBM      MSFT      GOOG
AAPL  1.000000  0.520795  0.688470  0.627134
IBM   0.520795  1.000000  0.584096  0.513872
MSFT  0.688470  0.584096  1.000000  0.738942
GOOG  0.627134  0.513872  0.738942  1.000000

In [206]: returns.cov()
Out[206]: 
          AAPL       IBM      MSFT      GOOG
AAPL  0.000315  0.000140  0.000208  0.000185
IBM   0.000140  0.000229  0.000150  0.000129
MSFT  0.000208  0.000150  0.000290  0.000209
GOOG  0.000185  0.000129  0.000209  0.000275

Используя метод corrwith объекта DataFrame, можно вычислять попарные корреляции между столбцами или строками DataFrame с другими объектами Series или DataFrame. Передача в качестве аргумента ряда возвращает ряд со значением корреляции, вычисленным для каждого столбца:

In [207]: returns.corrwith(returns.IBM)
Out[207]: 
AAPL    0.520795
IBM     1.000000
MSFT    0.584096
GOOG    0.513872
dtype: float64