billow926-DHyIWBm8NGc-unsplash.jpg

pandasメモ

 
0
このエントリーをはてなブックマークに追加
Kazuki Moriyama
Kazuki Moriyama (森山 和樹)

データの読み込み

csvからの読み込み

headerなし

df_none = pd.read_csv('data/src/sample.csv', header=None)
print(df_none)
#     0   1   2   3
# 0  11  12  13  14
# 1  21  22  23  24
# 2  31  32  33  34

# header 指定
df_names = pd.read_csv('data/src/sample.csv', names=('A', 'B', 'C', 'D'))
print(df_names)
#     A   B   C   D
# 0  11  12  13  14
# 1  21  22  23  24
# 2  31  32  33  34

pandasでcsv/tsvファイル読み込み(read_csv, read_table) | note.nkmk.me

sqliteからの読み込み

import sqlite3
from contextlib import closing

with closing(sqlite3.connect("database_path")) as conn:
   df = pd.read_sql_query("query", conn)

データの取得

column名(header)の取得

df.columns

書き込み

sqliteへの書き込み

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
pandas で sqlite3 の読み書き - Qiita

変換

data frame,seriesをlistに変換

df.values.tolist()
ser.values.tolist()

unix timeからdatetime

pd.to_datetimeを使う。  

Unit引数でもとがどういう粒度のデータなのか指定する。
http://024minion.hatenablog.jp/entry/2017/12/29/021448

ローソク足チャートの作成

生データからの取得
pandas dataframeのresampleを使用する
https://note.nkmk.me/python-pandas-resampling-ohlc/

columnがMultiIndexになったときの再設定

Resample関数などを使用するとcolumnがネストしたMultiIndexになるときがある。
Df.columnsに再代入すればネストを削除できる。

aggdf: pd.DataFrame = dataframe.resample(agg_unit).agg({"value": "ohlc", "quantity": "sum", "ts": "size"}).fillna(0)
aggdf.columns = [I[1] for I in aggdf.columns]

時間ごとの集計

resample関数を作成する。
dataframeの各列へのresample
https://stackoverflow.com/a/42938645
seriesへのresample
https://financial-it-engineer.hatenablog.com/entry/20161116/1479283739

例外対応

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of ‘RangeIndex’

  • resample関数のときにでた
    • dataframeのindexを DatetimeIndexに変更すれば解決した
    • resampleは日付でしか集計できないっぽい

DataError: No numeric types to aggregate

  • resample関数のときに出た
    • 集計対象のデータをnumericにしたら解決
    • 集計対象がobjectとかだと集計できない
info-outline

お知らせ

K.DEVは株式会社KDOTにより運営されています。記事の内容や会社でのITに関わる一般的なご相談に専門の社員がお答えしております。ぜひお気軽にご連絡ください。