仕事メモとか

仕事中に調べた情報とか知ったことをメモしています。
unixコマンド, vim, oracle, putty, postgresql, bash, EXCEL, python, SQL全般 など。
最近は tableau, movabletype とかも触ったりしています。
雑な読書感想とかはこちら

カテゴリ: pandas

文字コードをいい感じに揃える、str.normalize('NFKC')

プログラムを見ていたら、なんか呪文のように使ってる場所があって、あんまり気にせずコピペしていましたが、新ためてどういう意味なのか調べました。

{df}.{data}.str.normalize('NFKC')

調べてみたら、KCタイプの文字変換だったようです。
すっごい平たくいうと、半角カタカナとか混じっていても、一旦要素分解して、比較できる全角にするから比較しても大丈夫、という代物でした。


参考:
https://ja.wikipedia.org/wiki/Unicode%E6%AD%A3%E8%A6%8F%E5%8C%96
https://japandas.readthedocs.io/en/latest/jpstrings.html


このエントリーをはてなブックマークに追加

ValueError: Plan shapes are not aligned

シンプルな改修のはずなのに、なんかエラーがでて止まった。
内容は、

ValueError: Plan shapes are not aligned

というもの。
どうもpandasあたりで悪さをして、concatでエラーになっているようだけど、
症状から調べるより変更作業から調べた方が早そうなんで調査。

原因は、pandasにデータを渡してる部分でpostgreSQLにデータ取得を投げてるんですが、
そこに加えたカラム追加が、すでに同じ名前のカラムがあったのでバッティングしていました。

pandasか、dfで取り扱う名前が同じだから困ってエラーになったみたい。


このエントリーをはてなブックマークに追加

pandasでデータフレームをいろいろな形でmerge

はい、なんかわかったようでわかりづらいpandas。
SQLでやることはすぐに思いつくのに、pandasの書き方で四苦八苦してます。

っていうことで、超簡単対応表。
これだけ分かればいいかな。

SQL = pandas
 full outer join = outer
 left outer join = left
 join = join

pandasの表記例

    df_report = df_1.merge(df_2, on=['key'], how='outer')\
        .merge(df_3, on=['key'], how='outer')\
        .merge(df_4, on=['key'], how='outer')\
        .fillna(0)

やってることはkeyで接続し、全部full outer join。
最後にfull outer join なのでデータが入らない空部分ができるので、そこにゼロを入れる。


参考:
https://deepage.net/features/pandas-merge.html 
このエントリーをはてなブックマークに追加

pandasで、データフレームに対し、同様のフォーマットだったら全部置換したい、的な手法=applymap

はい、データフレーム使ってますか?
便利ですね、pandas。

ということで、今回の要件はこんな感じです。

要件:
データフレーム上では全てのデータをそのまま扱いたいが、
csvなどで出力するときは日付のフォーマットを全部固定差し替えしたい。

調べてみると、applymapというものが使えそうなんですが、これ指定の仕方がちょっと面白い。

df = df.applymap(function)

直接、function(関数)をぶっこみます。
ここで指定する関数はlambdaでも、defでもよいのですが、こんな感じになります。


def _format_date_time(value):
if isinstance(value, datetime):
return value.strftime('%Y/%m/%d')
else:
return value


formatted = {変換したいdf}.applymap(_format_date_time)

このようにすることで、内部関数「_format_date_time」をapplymapに突っ込んで、
変換したいdfの中身のうち、datetime型のものだけ出力を「YYYY/MM/DD」型に置換します。

慣れるとかなり強力です。
このエントリーをはてなブックマークに追加

↑このページのトップヘ