Cou氏の徒然日記

ほのぼの日記ブログです。

Python3の学習 その8 (pandasパッケージ #3)

Python

今回もpandasパッケージについて学習です。

前回は、CSV出力とCSVの読み込みをやってみました。その時に見た下記図を見ると、いろいろなフォーマット形式からの読み込みや書き込みがあるみたいです。

【参考】

  • 読み込むときは、read_*
  • 書き込むときは、to_*

で良いので、いろいろなフォーマット(形式)に変換できるようなので、CSV以外も試してみようかなと思います。

 

json形式

まずはよく使いそうな「JSON形式」。

Series型もDataFrame型も、to_json関数を持っているので、「to_json関数」を使ってjson形式で出力してみると…

 

[series.json]

[dataframe.json]

どちらもきちんとJSON形式で出力されていました。

 

続いて、出力したjsonファイルを読み込み直そうと、「read_json関数」で読み込もうとしてみると…

series.jsonファイルを読み込もうとしたら、エラーが発生。

一方、dataframe.jsonファイルのほうは普通に読み込みができました。

 

原因がわからなくて、pandasのページで仕様を見てみると…

pandas.read_json

pandas.read_json(path_or_buf*orient=Nonetyp='frame'dtype=None
convert_axes=Noneconvert_dates=Truekeep_default_dates=True
precise_float=Falsedate_unit=Noneencoding=Noneencoding_errors='strict'
lines=Falsechunksize=Nonecompression='infer'nrows=None
storage_options=Nonedtype_backend=<no_default>engine='ujson')[source]

Convert a JSON string to pandas object.

typ{‘frame’, ‘series’}, default ‘frame’

The type of object to recover.

 

上記を見ていると、typ属性を未指定(省略時)の場合は「frame」つまり「DataFrame型」と解析されてしまうようです。

series.jsonの中身は「Series型」のデータ構造だったので、解析でエラーとなっていたようです。

そのため、read_json関数で読み込む時に、typ属性で「series」を指定して実行してみると…

無事に読み込めました。

◆ html形式

続いてHTML形式。

こちらも、「to_html関数」で出力してみると…

エラーが発生。

エラーメッセージを見ると、「AttributeError: 'Series' object has no attribute 'to_html'」と出ているので、仕様を確認してみると…

確かに、Seriesクラスには「to_html」がありませんでした。

まあ、1次元配列なので、HTML形式にコンバートするメリットはなさそうですからね。

ということで、Series型の方をコメント化して再実行してみると…

DataFrame型はHTML形式で出力できました。

 

続いて、このファイルを読み込み。

しかし、以下のエラーが発生して読み込めませんでした。

…(中略)...

エラー内容を見ると、

「ImportError: Missing optional dependency 'lxml'. Use pip or conda to install lxml.」

と出ているので、「lxml」パッケージが入っていないことが原因で、「lxml」パッケージをインストールすればよいようです。

 

ということで、lxmlパッケージをインストール。

インストールコマンドライン(lxmlパッケージの場合)

!pip install lxml

 

これで再読込みしてみると…

無事に読み込めました。