よちよちpython

独習 python/Qpython/Pydroid3/termux

PandasでCSVファイルを読む

今回はPandasを使ってCSVファイルを読み取ってみるテスト。

列を指定して読むなどの細かいやり方はPandasの操作法の習得によるだろうから、今回は一切触れません。

前回
csvモジュールでcsvファイルを読む - よちよちpython

作業環境


  • Androidスマホ
    • Qpythonの QPyNotebook(python3.6)
    • Pydroid3(python3.7)
    • termux
      • python3.7


目次



csvファイルをWebからダウンロード


前回と同じ人口統計のcsvファイルc01.csvを使おうと思います。ダウンロードはPythonで行います。

下記のコードを実行すると、

  • カレントディレクトリに目的のcsvファイルが存在しなければDLし、
  • 既にあれば何もしません。
import os
import glob
import urllib.request
import ssl

# 作業ディレクトリ取得
cwdir = os.getcwd()

# 今からDLするファイルがローカルにあるかどうか確認
file_name = "c01.csv"
check = glob.glob(file_name)

# もしなければDLする
if len(check) == 0:
    print("{}に{}は存在しません。\nダウンロードします。".format(cwdir,file_name))
    
    try:
        # 認証回避
        ssl._create_default_https_context = ssl._create_unverified_context

        # DL先のurlとファイル名を指定
        url = "https://www.e-stat.go.jp/stat-search/file-download?statInfId=000031524010&fileKind=1"
        save_name = file_name

        # DLする
        urllib.request.urlretrieve(url,save_name)
        print("\nDLが完了しました。")
    except:
        print("DLできません。")
else:
    print("既に{}は{}にDL済みです。".format(file_name,cwdir))
    
既にc01.csvは/storage/emulated/0/qpython/notebooksにDL済みです。


PandasでCSVファイルを読む


Pandasを使うのでPandasモジュールのインストールが必要です。

$ pip install pandas

・Anacondaをお使いの方  

$ conda install pandas


Android端末をお使いの方

・QpythonでのPandasのインストール

ここを参考に

・Pydroid3でのPandasインストール

「アプリ起動」  
→「左上の【三】」
→「メニューの【Pip】」
→「QUICK INSTALL」
→「pandas で【install】」

・termuxにPandasインストール
ちと手間が掛かります。

ここを参考に



Pandasでcsvファイルを読むときに次のを使う

  • read_csv() 区切りがカンマ
  • read_table() 区切りがTab

で使い分けるそうだが、read_csvだけを試します。

Windowsの場合はencoding="shift_jis"を指定せずに実行するとエラーが出るかと思います。 というか出た。

import pandas as pd

# 上でダウンロードしたファイル
file_name = "c01.csv"

# csvをPandasで読む
df = pd.read_csv(file_name,encoding="shift_jis")

# 読ませたものを出力
print(df)
                                               都道府県コード 都道府県名   元号  和暦(年)  \
0                                                   00    全国   大正    9.0   
1                                                   01   北海道   大正    9.0   
2                                                   02   青森県   大正    9.0   
3                                                   03   岩手県   大正    9.0   
4                                                   04   宮城県   大正    9.0   
..                                                 ...   ...  ...    ...   
977                                                 45   宮崎県   平成   27.0   
978                                                 46  鹿児島県   平成   27.0   
979                                                 47   沖縄県   平成   27.0   
980                         1) 沖縄県は調査されなかったため,含まれていない。   NaN  NaN    NaN   
981  2) 長野県西筑摩群山口村と岐阜県中津川市の境界紛争地域人口(男39人,女34人)は全国に含...   NaN  NaN    NaN   

      西暦(年)    注    人口(総数)     人口(男)     人口(女)  
0    1920.0  NaN  55963053  28044185  27918868  
1    1920.0  NaN   2359183   1244322   1114861  
2    1920.0  NaN    756454    381293    375161  
3    1920.0  NaN    845540    421069    424471  
4    1920.0  NaN    961768    485309    476459  
..      ...  ...       ...       ...       ...  
977  2015.0  NaN   1104069    519242    584827  
978  2015.0  NaN   1648177    773061    875116  
979  2015.0  NaN   1433566    704619    728947  
980     NaN  NaN       NaN       NaN       NaN  
981     NaN  NaN       NaN       NaN       NaN  

[982 rows x 9 columns]

全てを読み込んで全てを出力させると、行の最初と最後の4行ずつが出力され、中間は省略されている。


実行結果が如何にスマホで見難いかを示すw

↓ QPyNotebook横向き

f:id:chayarokurokuro:20190906020205j:plain

↓ Pydroid3のJupyterNotebook横向き

f:id:chayarokurokuro:20190906020258j:plain

↓ termux上のPythonで実行横向き

f:id:chayarokurokuro:20190906020324j:plain

表示をスマホでやるもんじゃないっす。

学習しない奴



  • delimiter(区切り文字)はデフォルトでカンマ。
  • headerを指定しなければ1行目がヘッダーとして読まれる
  • indexを指定しなければ0番から自動で付く  


列指定等の細かい表示指示、その他諸々  

リンクで済ませる横着さ。

IO tools (text, CSV, HDF5, …) — pandas 0.25.1 documentation

PythonでCSVファイルを読み込み・書き込み(入力・出力) | note.nkmk.me

今回はこれにて。