pandas:【CSV】読み込みと書き出し


前提

サンプルコード

CSV読み込み(データフレーム作成)

CVSファイル準備

!echo -e "20220101,34\n20220102,78\n20220103,99" > ./in.csv
!cat ./in.csv
20220101,34
20220102,78
20220103,99
  • Linuxコマンドを利用して作成
    • windowsの場合はテキストエディタを使って作成

CVSファイル読み込み

df = pd.read_csv(
  'in.csv',
  names=('Date', 'Value'), #列名を設定
  index_col='Date', #index列を指定
  parse_dates=True #index列(ここでは「Date」)をdatetime型に変換
)
print(df)
print(type(df))
            Value
Date
2022-01-01     34
2022-01-02     78
2022-01-03     99
<class 'pandas.core.frame.DataFrame'>
  • 「DataFrame」型になっている
  • index列に指定した「Date」が先頭列なので、簡単に指定できたみたい

データの確認

a = df[df.index=='2022-01-01']
b = a['Value']
print(a)
print(type(a))
print(b)
print(type(b))
Date
2022-01-01     34
<class 'pandas.core.frame.DataFrame'>
Date
2022-01-01    34
Name: Value, dtype: int64
<class 'pandas.core.series.Series'>
  • データが確認できる
    • データの抽出方法は別途説明
  • 補足
    • データ型がそれぞれ「DataFrame」と「Series」

データフレームのCSV書き込み

CVSファイル準備

!echo -e "20220101,34\n20220102,78\n20220103,99" > ./in.csv
!cat ./in.csv
20220101,34
20220102,78
20220103,99
  • Linuxコマンドを利用して作成(CSV読み込みの説明と同じ手順)
    • windowsの場合はテキストエディタを使って作成

CVSファイル読み込み

df = pd.read_csv('in.csv', header=None)
print(df)
a = df[0][0]
b = df[1][0]
print(a)
print(type(a))
print(b)
print(type(b))
          0   1
0  20220101  34
1  20220102  78
2  20220103  99
20220101
<class 'numpy.int64'>
34
<class 'numpy.int64'>
  • header=None
    • ヘッダなしで読み込み
    • 列番号が[0,1]と振られている
  • 補足
    • どちらも数値型になっている

CSV出力と出力ファイルの確認

df.to_csv("./out.csv", index=False, header=False)
!ls -l ./out.csv
!cat ./out.csv
-rw-rw-r-- 1 futa futa 36 Mar 10 16:06 ./out.csv
20220101,34
20220102,78
20220103,99
  • ファイル「out.csv」が作成されている
    • windowsではエクスプローラーなどで確認
  • index=False
    • インデックス番号の列を出力しない
  • header=False
    • ヘッダを出力しない


Posted by futa