2017-08-01から1ヶ月間の記事一覧
Series.dt.strftimeを使えばフォーマットを指定して文字列にできる。 all_data['Order Day new'] = all_data['Order Day new'].dt.strftime('%Y-%m-%d') 参考: stackoverflow.com
C列にグループ内での連番を振りたい場合は以下のようにする。 df['C'] = df.groupby(['A','B']).cumcount() 参考: stackoverflow.com
原因はDataFrame.plotメソッドの引数としてkind="scatter"とcolor=Noneを渡していたこと。 kind="scatter"がlineやbarなら問題ないけど、なぜかscatterだけcolor=Noneを渡すとエラーになる。。 この現象が以下のIssueで報告されているものかはっきりわからな…
resampleして新しく行が挿入された場合、そこの値はNaNになる。 それをゼロにしたいがbfillなど近くのサンプルの値で埋める方法しか見付からなかった。。 色々やってるとsum()を実行すると0になることがわかった。例は以下。 summary = summary.set_index(DA…
dtypeがintだとNaNを代入出来ない。astype("Int64")でInt64型に変換するとpd.NAをセットできる。 参考: stackoverflow.com
タブを右クリックしてNew View for Notebookをクリックすると分割出来る。 参考: discourse.jupyter.org
これはtqdmのバグ。以下で報告されているがまだ対応されてない。。 github.com
JupyterLabで表示した画像のコピーが出来ない・・と困ってたけど、Shift+Clickでブラウザ標準のコンテキストメニューが出るので、そこから「画像をコピー」を選択するとできた! JupyterLabの右クリックメニューの中に画像をコピーとかも入れといて欲しい。…
df.index = df.index + 1 でできる。 参考: qiita.com
pandasでSeriesのmedianを取ったら、2.5みたいな値が返ってきてびっくりした。データは整数しかないので整数になると思ってた。。 データ数が偶数の場合は中央の値が二つになるのでその平均を取るっぽい。(1,2,3,4の場合、2,3が中央の値になって中央値は2.5…
大体そうだと思うけど、binningが遅い場合はnumpyで処理すると速くなる。 以下がpandasを使った実装。 def cut_bins(s): m = s.max() categories = pd.cut(s, [0, m * 0.05, m * 0.25, m * 0.75, m * 0.95, m]) category_counts = categories.cat.codes.valu…
import tqdmの代わりにfrom tqdm.notebook import tqdmを使えば良い。 参考: stackoverflow.com
原因はwidgetsをインストールしてないため。以下を実行してインストールすると直った。 jupyter labextension install @jupyter-widgets/jupyterlab-manager 参考: stackoverflow.com
なぜかexistsメソッドは存在せず、以下のように例外が発生するかどうかで判別する。これはやりたくないが。。 class S3Repository: def __init__(self, bucket_name: str): s3: ServiceResource = boto3.resource('s3') self.bucket_name = bucket_name self…
ファイル名に現在時刻を含めて保存するような場合、デフォルトではUTCなので都合が悪い。 以下でJSTにできる。 datetime.datetime.now(pytz.utc).astimezone(pytz.timezone("Asia/Tokyo")).strftime("%F %X") この他にtzlocalを使った方法なども見付かったが…
原因はindexに重複があるため。indexを一意にすると直った。 参考: stackoverflow.com
原因はIndexがSortされていなかったため。 どうもasfreqはindexが時系列で、ソートされていることを前提としているっぽい。
特定のクラスのサブクラスをsubclassesを使ってすべて取得する必要があったが、subclassesはimport済のサブクラスしか返してくれない。 なので以下のコードで特定のフォルダ内のすべてのモジュールをimportした。 def import_feature_creators(): feature_fi…
/edaフォルダに.ipynbがあり、/srcに.pyモジュールがある場合、以下のように.pyモジュールのフォルダをsys.pathに追加するとimportできるようになる。 import sys sys.path.append('../src/') ただし、init.pyがないフォルダの.pyファイルはimportできないの…
notebookはファイルを分割できないので不便。共通の関数やクラスを.pyファイルに移してそれを再利用できるようにすべき。 その場合、notebookは.pyを修正してもimportし直してくれない。 pythonはimportしたコードをキャッシュするからだ。 以下をnotebookの…
原因は不明だし解決策もわかってないけど。。多分jupyterにjupyterlab-lsp拡張を入れた時からpylsプロセスが起動するようになったが、それのCPU使用率がずっと100%になる。 以下でも解決してないみたいなので一旦pylsプロセスをkillした。 github.com
以下のようにapplyにキーワード引数を渡すと同じ仮引数名の項目に値を渡してくれる。 df.apply(f2, col=(2, 3)) def func(row: Series, col: str): # colに変数が代入される pass 参考: qiita.com
Pandasで処理した結果をcsvにしてダウンロードしてエクセルで見るということは結構よくあるが、 そのまま開くと文字化けする。原因はエクセルがBOM無しUTF8を正しく処理してくれないため。 BOMを付ければ文字化けしなくなるが、毎回エディタを開いてBOMを付…
原因は不明だが、Kernelをリスタートしたら直った。 JupiterLabはちょくちょく調子が悪くなる。。謎のエラーが出たらとりあえずKernelをリスタートした方が良さそう。
以下のようにしてデフォルトの表示数を変更すればいい。 pd.set_option('display.max_columns', 100) pd.set_option('display.max_rows', 500) 参考: medium.com
フィルタしたい列をset_indexでIndexにし、以下を実行すると日付指定で絞れる。 df.loc['2014-01-01':'2014-02-01'] Indexでなくても以下で絞れる。 df[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')] 参考: stackoverflow.com
コマンドを kill -s 9 <プロセスID> にして強制終了すると終了できた。 参考: eng-entrance.com
pip install environment-kernels を実行したら直った。 参考: qiita.com
以下によると、設定画面で「PyQt compatible」のチェックを外すと直ると書いてあったが直らなかった。。 intellij-support.jetbrains.com デバッグ実行でなく、通常の実行であれば以下の設定をすれば実行出来る。 intellij-support.jetbrains.com https://yo…
以下に従ってPyCharmを設定すればよい。 www.jetbrains.com 残念ながらJupiterNotebook上でデバッグ実行したり変数の中身を見たりする機能はローカルでJupiterServerを起動した場合のみ使える。 以下のIssueでRemoteでもデバッグ実行できるようにする要望が…