こんにちは、ほけきよです。
pythonでデータを取り扱っているとき「あれ、これどうやるんだっけ??」
ってなること、ありませんか?僕は10分に1回程度なります。
いや、覚えろと自分でも思うんですが、覚えられないんですよね。100回くらい同じコマンドを調べてたりする。
物覚えが良くないので、ココを見れば絶対大丈夫なようにしておこうと思い、まとめてみました。
jupyterで最初に開くときに読み込むモジュールたち
どうせ色々やっておくと、これらは必要になってくるので、もうはじめにコピペしておけばいい。
%matplotlib inline
import json
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import scipy
import datetime
datetime
日付⇔文字列の変換
これ、100回くらい調べている。
- string ⇨ datetime フォーマットに気をつける。
from datetime import datetime as dt
tstr1 = '2019-01-01 00:00:00'
tdatetime = dt.strptime(tstr, '%Y-%m-%d %H:%M:%S')
tstr2 = '2019/01/01 00:00:00'
tdatetime = dt.strptime(tstr, '%Y/%m/%d %H:%M:%S')
from datetime import datetime as dt
tdatetime = dt.now()
tstr1 = tdatetime.strftime('%Y-%m-%d')
tstr2 = tdatetime.strftime('%Y/%m/%d %H:%M:%S')
datetimeの足し算引き算
now = datetime.now()
tomorrow = now + datetime.timedelta(days = 1)
nextweek = now + datetime.timedelta(weeks = 1)
引数はseconds
, minutes
, days
, weeks
import json
orig_data = {"a":1,"b":2,"c":3}
json_data = json.dumps(orig_data)
dict_data = json.loads(json_data)
with open('input.json') as f:
json_data = json.load(f)
with open('output.json', 'w') as f:
json.dump(dict_data, f, indent=4)
datetimeをjsonにする時、エラーが出る
どうやるんだっけ
import datetime
import json
time_data = {"now":datetime.datetime.now()}
json_data = json.dumps(time_data)
TypeError: Object of type 'datetime' is not JSON serializable
解決策 : default引数に下記関数を与え、対応していない方に対するフォーマットを指定。
from datetime import datetime
import json
time_data = {"now":datetime.now()}
def support_datetime_default(o):
if isinstance(o, datetime):
return o.isoformat()
raise TypeError(repr(o) + " is not JSON serializable")
json_data = json.dumps(time_data, default=support_datetime_default)
print(json_data)
{"now": "2019-01-17T21:09:03.966641"}
pandas
~以外を表すやつ
df[df.a > 0]
df[~df.a > 0]
andとor
pythonの文法と違うので、注意。&
, |
を使うのと、カッコでくくっておくことが大事
df[(df.a>0) & (df.b>0)]
df[(df.a>0) | (df.b>0)]
inf弾く
df.replace([np.inf, -np.inf], np.nan)
リストをdfにサクッと変換
列の名前は必須
import pandas as pd
import numpy as np
A_23 = np.linspace(0,5,6).reshape(2,3)
"""
array([[0., 1., 2.],
[3., 4., 5.]])
"""
df_ = pd.DataFrame(A_23,columns=["a","b","c"])
"""
a b c
0 0.0 1.0 2.0
1 3.0 4.0 5.0
"""
datetimeとして読み込み
df.date=pd.to_datetime(df.date,format="%Y/%m/%d %H:%M:%S")
読み込み時にcodecのエラーが出る
import codec
が必要になることに注意
with codecs.open("file.csv", "r", "Shift-JIS", "ignore") as file:
df = pd.read_table(file, delimiter=",")
DataFrameのfor文
色々あるけど、一番使うのはiterrow
な気がする。各rowの0番目はindex, 1番目にはまとめてデータテーブルが入っている
A_23 = np.linspace(0,5,6).reshape(2,3)
df_ = pd.DataFrame(A_23,columns=["a","b","c"])
"""
a b c
0 0.0 1.0 2.0
1 3.0 4.0 5.0
"""
for row in df_.iterrows():
print(row[0],row[1]["a"])
"""
0 0.0
1 3.0
"""
numpy
linspaceとarangeの違い
- linspace : 範囲の指定を重視
- arange : 幅の指定を重視
numpyでサクっと配列確保
np.zeros(N)
np.zeros((N,M))
nanの判定
np.isnan(A)
最大値と、その引数
A = np.array([1,2,10,4,5])
print(A.max(),A.argmax())
"""
10 2
"""
ゼロ除算の回避
a = [1, 0, 2]
b = [0, 0, 4]
c = np.divide(a, b, out=np.zeros_like(a), where=b!=0)
条件を満たすものだけ抽出
b = a[np.where(a>3)]
- コンボ : nanを除外した要素だけ抽出することもできる
A[np.where(~np.isnan(A))]
matplotlib
種々の調整
www.procrasist.com
まとめ
まだある気がするのですが、とりあえず本当にいつも調べる者たちだけでもということでまとめておきました。随時メモ代わりに更新すると思います。
是非ご参考に!ではではっ