日々精進

新しく学んだことを書き留めていきます

2017-08-01から1ヶ月間の記事一覧

datetime型のSeriesをstrに変換する

AI

Series.dt.strftimeを使えばフォーマットを指定して文字列にできる。 all_data['Order Day new'] = all_data['Order Day new'].dt.strftime('%Y-%m-%d') 参考: stackoverflow.com

DataFrameのgroup毎に連番を振る

AI

C列にグループ内での連番を振りたい場合は以下のようにする。 df['C'] = df.groupby(['A','B']).cumcount() 参考: stackoverflow.com

DataFrame.plotを実行すると「ValueError: 'c' argument has 1 elements, which is not acceptable for use with 'x' with size 12, 'y' with size 12.」エラー

AI

原因はDataFrame.plotメソッドの引数としてkind="scatter"とcolor=Noneを渡していたこと。 kind="scatter"がlineやbarなら問題ないけど、なぜかscatterだけcolor=Noneを渡すとエラーになる。。 この現象が以下のIssueで報告されているものかはっきりわからな…

Pandasでresampleした時にnaをゼロ埋めする方法

AI

resampleして新しく行が挿入された場合、そこの値はNaNになる。 それをゼロにしたいがbfillなど近くのサンプルの値で埋める方法しか見付からなかった。。 色々やってるとsum()を実行すると0になることがわかった。例は以下。 summary = summary.set_index(DA…

int型のSeriesにNaNを設定したい

AI

dtypeがintだとNaNを代入出来ない。astype("Int64")でInt64型に変換するとpd.NAをセットできる。 参考: stackoverflow.com

JupiterLabでエディタを縦に分割する方法

AI

タブを右クリックしてNew View for Notebookをクリックすると分割出来る。 参考: discourse.jupyter.org

progress_aggregateにdictを渡すと「TypeError: 'dict' object is not callable」エラーになる

AI

これはtqdmのバグ。以下で報告されているがまだ対応されてない。。 github.com

JupyterLabで表示した画像をクリップボードにコピーする方法

AI

JupyterLabで表示した画像のコピーが出来ない・・と困ってたけど、Shift+Clickでブラウザ標準のコンテキストメニューが出るので、そこから「画像をコピー」を選択するとできた! JupyterLabの右クリックメニューの中に画像をコピーとかも入れといて欲しい。…

DataFrameのindexを1originにする

AI

df.index = df.index + 1 でできる。 参考: qiita.com

整数データのmedianが小数を含むことがある

AI

pandasでSeriesのmedianを取ったら、2.5みたいな値が返ってきてびっくりした。データは整数しかないので整数になると思ってた。。 データ数が偶数の場合は中央の値が二つになるのでその平均を取るっぽい。(1,2,3,4の場合、2,3が中央の値になって中央値は2.5…

binningはPandasよりnumpyを使うと速い

AI

大体そうだと思うけど、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…

JupyterNotebookでtqdmを使うとプログレスバーの行が沢山表示されて鬱陶しい

AI

import tqdmの代わりにfrom tqdm.notebook import tqdmを使えば良い。 参考: stackoverflow.com

JupyterNotebookでtqdmを使っても「HBox(children=(FloatProgress(value=0.0, max=1247.0), HTML(value='')))」という文字が出るだけ

AI

原因はwidgetsをインストールしてないため。以下を実行してインストールすると直った。 jupyter labextension install @jupyter-widgets/jupyterlab-manager 参考: stackoverflow.com

boto3でS3にファイルがあるかをチェックする

IT

なぜかexistsメソッドは存在せず、以下のように例外が発生するかどうかで判別する。これはやりたくないが。。 class S3Repository: def __init__(self, bucket_name: str): s3: ServiceResource = boto3.resource('s3') self.bucket_name = bucket_name self…

pythonでJSTの時刻を文字列にする方法

AI

ファイル名に現在時刻を含めて保存するような場合、デフォルトではUTCなので都合が悪い。 以下でJSTにできる。 datetime.datetime.now(pytz.utc).astimezone(pytz.timezone("Asia/Tokyo")).strftime("%F %X") この他にtzlocalを使った方法なども見付かったが…

asfreqを実行すると「ValueError: cannot reindex from a duplicate axis」エラー

AI

原因はindexに重複があるため。indexを一意にすると直った。 参考: stackoverflow.com

Pandasでasfreqを実行するとDataFrameの行数が0になる

AI

原因はIndexがSortされていなかったため。 どうもasfreqはindexが時系列で、ソートされていることを前提としているっぽい。

pythonで特定のフォルダのモジュールを全部読み込む方法

AI

特定のクラスのサブクラスをsubclassesを使ってすべて取得する必要があったが、subclassesはimport済のサブクラスしか返してくれない。 なので以下のコードで特定のフォルダ内のすべてのモジュールをimportした。 def import_feature_creators(): feature_fi…

.ipynbから自作の.pyファイルをimportする

AI

/edaフォルダに.ipynbがあり、/srcに.pyモジュールがある場合、以下のように.pyモジュールのフォルダをsys.pathに追加するとimportできるようになる。 import sys sys.path.append('../src/') ただし、init.pyがないフォルダの.pyファイルはimportできないの…

.ipynbから自分で作ったpythonモジュールをimportしている時に、モジュールを修正したらautoreloadする

AI

notebookはファイルを分割できないので不便。共通の関数やクラスを.pyファイルに移してそれを再利用できるようにすべき。 その場合、notebookは.pyを修正してもimportし直してくれない。 pythonはimportしたコードをキャッシュするからだ。 以下をnotebookの…

pylsプロセスのCPU使用率が100%に張り付く

IT

原因は不明だし解決策もわかってないけど。。多分jupyterにjupyterlab-lsp拡張を入れた時からpylsプロセスが起動するようになったが、それのCPU使用率がずっと100%になる。 以下でも解決してないみたいなので一旦pylsプロセスをkillした。 github.com

df.applyに引数を渡す方法

AI

以下のようにapplyにキーワード引数を渡すと同じ仮引数名の項目に値を渡してくれる。 df.apply(f2, col=(2, 3)) def func(row: Series, col: str): # colに変数が代入される pass 参考: qiita.com

csvファイルをscpでwindows pcにダウンロードし、BOMを付けるバッチ

AI

Pandasで処理した結果をcsvにしてダウンロードしてエクセルで見るということは結構よくあるが、 そのまま開くと文字化けする。原因はエクセルがBOM無しUTF8を正しく処理してくれないため。 BOMを付ければ文字化けしなくなるが、毎回エディタを開いてBOMを付…

JupyterLabで「ArrowIOError: Invalid parquet file. Corrupt footer」エラー

AI

原因は不明だが、Kernelをリスタートしたら直った。 JupiterLabはちょくちょく調子が悪くなる。。謎のエラーが出たらとりあえずKernelをリスタートした方が良さそう。

Pandasでデータを表示すると...に省略される

AI

以下のようにしてデフォルトの表示数を変更すればいい。 pd.set_option('display.max_columns', 100) pd.set_option('display.max_rows', 500) 参考: medium.com

Pandasで日付指定でフィルタする方法

AI

フィルタしたい列を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

JupyterLabのプロセスをkillコマンドで停止したいが、できない

AI

コマンドを kill -s 9 <プロセスID> にして強制終了すると終了できた。 参考: eng-entrance.com

JupyterLabで「The 'kernel_spec_manager_class' trait of <jupyterlab.labapp.LabApp object at 0x7fa28680fe10> instance must be a type, but 'environment_kernels.EnvironmentKernelSpecManager' could not be imported」エラー

AI

pip install environment-kernels を実行したら直った。 参考: qiita.com

PyCharmで.ipynbファイルのCellをデバッグ実行すると「Connection to Python debugger failed: socket closed」エラー

AI

以下によると、設定画面で「PyQt compatible」のチェックを外すと直ると書いてあったが直らなかった。。 intellij-support.jetbrains.com デバッグ実行でなく、通常の実行であれば以下の設定をすれば実行出来る。 intellij-support.jetbrains.com https://yo…

remote hostで起動したJupyterサーバに接続してPyCharmからJupyter Notebookを編集・実行する方法

AI

以下に従ってPyCharmを設定すればよい。 www.jetbrains.com 残念ながらJupiterNotebook上でデバッグ実行したり変数の中身を見たりする機能はローカルでJupiterServerを起動した場合のみ使える。 以下のIssueでRemoteでもデバッグ実行できるようにする要望が…