pandasの基本的な使い方たちを忘れないようにメモしてみる part1

csvデータの読み込み方法など

csvデータを読み込む

ローカルファイル

pandasのread_csvメソッドで読み込める
今のところ日付として取り扱うカラムを指定するparse_datesの指定のみでうまく読み込めている

>>> import pandas as pd
>>> data = pd.read_csv('data/130001_tokyo_covid19_patients.csv', parse_dates = ['公表_年月日', '発症_年月日', '確定_年月日'], low_memory=False)
>>> data
            No  全国地方公共団体コード 都道府県名  市区町村名     公表_年月日     発症_年月日     確定_年月日  ... 患者_職業 患者_状態 患者_症状 患者_渡航歴の有無フラグ  患者_接触歴の有無フラグ  備考  退院済フラグ
0            1       130001   東京都    NaN 2020-01-24        NaT        NaT  ...   NaN   NaN   NaN          NaN           NaN NaN     1.0
1            2       130001   東京都    NaN 2020-01-25        NaT        NaT  ...   NaN   NaN   NaN          NaN           NaN NaN     1.0
2            3       130001   東京都    NaN 2020-01-30        NaT        NaT  ...   NaN   NaN   NaN          NaN           NaN NaN     1.0
3            4       130001   東京都    NaN 2020-02-13        NaT        NaT  ...   NaN   NaN   NaN          NaN           NaN NaN     1.0
4            5       130001   東京都    NaN 2020-02-14        NaT        NaT  ...   NaN   NaN   NaN          NaN           NaN NaN     1.0
...        ...          ...   ...    ...        ...        ...        ...  ...   ...   ...   ...          ...           ...  ..     ...
202302  201419       130001   東京都    NaN 2021-07-27 2021-07-24 2021-07-26  ...   会社員   NaN   NaN          NaN           1.0 NaN     1.0
202303  201420       130001   東京都    NaN 2021-07-27 2021-07-23 2021-07-26  ...        NaN   NaN          NaN           NaN NaN     1.0
202304  201421       130001   東京都    NaN 2021-07-27 2021-07-22 2021-07-26  ...        NaN   NaN          NaN           1.0 NaN     1.0
202305  201422       130001   東京都    NaN 2021-07-27 2021-07-17 2021-07-26  ...        NaN   NaN          NaN           NaN NaN     NaN
202306  201423       130001   東京都    NaN 2021-07-27 2021-07-24 2021-07-26  ...   会社員   NaN   NaN          NaN           NaN NaN     NaN

[202307 rows x 17 columns]

httpで取得する

requestsでファイルを取得してStringIO経由でread_csvに渡している
CacheControlを使うとリクエストデータをキャッシュすることができる(この例では.webcacheディレクトリにキャッシュが保存される)

>>> import io
>>>
>>> import pandas as pd
>>> import requests
>>> from cachecontrol import CacheControl
>>> from cachecontrol.caches import FileCache
>>>
>>> cached_session = CacheControl(requests.Session(), cache=FileCache('.webcache'))
>>> response = cached_session.get('https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv')
>>> data = pd.read_csv(io.StringIO(response.text), parse_dates = ['公表_年月日', '発症_年月日', '確定_年月日'], low_memory=False)
>>> data
            No  全国地方公共団体コード 都道府県名  市区町村名     公表_年月日 発症_年月日 確定_年月日  患者_居住地  ... 患者_性別 患者_職業 患者_状態  患者_症状  患者_渡航歴の有無フラグ  患者_接触歴の有無フラグ  備考  退院済フラグ
0            1       130001   東京都    NaN 2020-01-24    NaT    NaT  湖北省武漢市  ...    男性   NaN   NaN    NaN           NaN           NaN NaN     1.0
1            2       130001   東京都    NaN 2020-01-25    NaT    NaT  湖北省武漢市  ...    女性   NaN   NaN    NaN           NaN           NaN NaN     1.0
2            3       130001   東京都    NaN 2020-01-30    NaT    NaT  湖南省長沙市  ...    女性   NaN   NaN    NaN           NaN           NaN NaN     1.0
3            4       130001   東京都    NaN 2020-02-13    NaT    NaT      都内  ...    男性   NaN   NaN    NaN           NaN           NaN NaN     1.0
4            5       130001   東京都    NaN 2020-02-14    NaT    NaT      都内  ...    女性   NaN   NaN    NaN           NaN           NaN NaN     1.0
...        ...          ...   ...    ...        ...    ...    ...     ...  ...   ...   ...   ...    ...           ...           ...  ..     ...
323152  322269       130001   東京都    NaN 2021-08-25    NaT    NaT     NaN  ...    女性   NaN   NaN    NaN           NaN           NaN NaN     NaN
323153  322270       130001   東京都    NaN 2021-08-25    NaT    NaT     NaN  ...    女性   NaN   NaN    NaN           NaN           NaN NaN     NaN
323154  322271       130001   東京都    NaN 2021-08-25    NaT    NaT     NaN  ...    女性   NaN   NaN    NaN           NaN           NaN NaN     NaN
323155  322272       130001   東京都    NaN 2021-08-25    NaT    NaT     NaN  ...    男性   NaN   NaN    NaN           NaN           NaN NaN     NaN
323156  322273       130001   東京都    NaN 2021-08-25    NaT    NaT     NaN  ...    女性   NaN   NaN    NaN           NaN           NaN NaN     NaN

[323157 rows x 17 columns]

文字列をcsvとして読み込む場合はStringIOでいける

例として使うぐらいであまり使うことはなさそうだけれどできる

>>> import io
>>> import pandas as pd
>>> csv = '''date,id,data,count,xyz
... 2021-04-01, 1, data1, 1, 2
... 2021-04-02, 2, data2, 2, 3
... 2021-04-03, 3, data3, 3, 4
... 2021-04-04, 4, data4, 4, 5
... 2021-04-05, 5, data5, 5, 6
... 2021-04-06, 6, data6, 6, 7
... 2021-04-07, 7, data7, 7, 8
... 2021-04-08, 8, data8, 8, 9
... 2021-04-09, 9, data9, 9, 10
... 2021-04-10, 10, data10, 10, 11
... '''
>>>
>>> data = pd.read_csv(io.StringIO(csv), parse_dates = ['date', ], low_memory=False)
>>> data
        date  id     data  count  xyz
0 2021-04-01   1    data1      1    2
1 2021-04-02   2    data2      2    3
2 2021-04-03   3    data3      3    4
3 2021-04-04   4    data4      4    5
4 2021-04-05   5    data5      5    6
5 2021-04-06   6    data6      6    7
6 2021-04-07   7    data7      7    8
7 2021-04-08   8    data8      8    9
8 2021-04-09   9    data9      9   10
9 2021-04-10  10   data10     10   11