(111) pandasで CSVファイルの読み書き

投稿者: | 2019年10月29日

2,557 views

この記事は最終更新から 1781日 が経過しています。

1. やりたいこと

過去記事 (35) numpy or CSVパッケージでCSVファイルの読み書き では、NumPy, CSVパッケージを使用した CSVファイルのリード、ライトについて書いた。今回は pandas を使ってこれをやってみたい。

2. やってみる

(1) CSVファイルを用意する。

今回は、こんな CSVファイル book.csv を用意した。
・各列に、文字列、整数、実数を用意した。
・先頭行には、各列のタイトル(=列名)を書いた。
・各データを区切るセパレータ文字は「,」にした。

date,name,h,w
2019-3-19,山田,170,65.3
2019-4-15,秋元,175,72.5
2019-8-30,鈴木,183,78.1
2019-10-15,田川,164,70.0

(2) pandasで CSVファイルを読む。

pandas.read_csv を使って CSVファイルを読み込む。

>>> import pandas as pd
>>> d = pd.read_csv('./book.csv', sep=',')

二次元データなので DataFrame 型オブジェクトとして保持されている。

>>> d
         date name    h     w
0   2019-3-19   山田  170  65.3
1   2019-4-15   秋元  175  72.5
2   2019-8-30   鈴木  183  78.1
3  2019-10-15   田川  164  70.0
>>>
>>> type(d)
<class 'pandas.core.frame.DataFrame'>

CSVファイルを読み込んだ時に、各列のデータ種別を自動的に判別してくれている。
dtypes で各要素のデータ種別を見ることが出来る。

>>> d.dtypes
date     object
name     object
h         int64
w       float64
dtype: object

type で個々に見ることもできる。

>>> type(d.loc[0]['date'])
<class 'str'>
>>>
>>> type(d.loc[0]['name'])
<class 'str'>
>>>
>>> type(d.loc[0]['h'])
<class 'numpy.int64'>
>>>
>>> type(d.loc[0]['w'])
<class 'numpy.float64'>

shape で要素数を見ることが出来る。

>>> d.shape
(4, 4)

index を見る。

>>> d.index
RangeIndex(start=0, stop=4, step=1)

columns を見る。

>>> d.columns
Index(['date', 'name', 'h', 'w'], dtype='object')

(3) pandasで CSVファイルを書く。

pandas.to_csv を使って CSVファイルを書き出す。

まずは、何も考えずに、引数にファイル名だけを指定して実行してみる。

>>> d.to_csv('book2.csv')

すると、indexまで出力されてしまった。

,date,name,h,w
0,2019-3-19,山田,170,65.3
1,2019-4-15,秋元,175,72.5
2,2019-8-30,鈴木,183,78.1
3,2019-10-15,田川,164,70.0

そこで…
index=False を指定し、indexなしで出力させるようにした。

>>> d.to_csv('book2.csv', index=False)

すると、手書きの CSVファイルと同じものが出力された。

date,name,h,w
2019-3-19,山田,170,65.3
2019-4-15,秋元,175,72.5
2019-8-30,鈴木,183,78.1
2019-10-15,田川,164,70.0

header=False を指定すると、列名を出力しないようにできる。

>>> d.to_csv('book2.csv', index=False)

すると、先頭行にあった「列名」が消えた。

2019-3-19,山田,170,65.3
2019-4-15,秋元,175,72.5
2019-8-30,鈴木,183,78.1
2019-10-15,田川,164,70.0

sep=’xxxxx’ を指定すると、データ間の区切り文字を指定できる。
ここではタブ文字「\t」を指定してみる。無指定の場合は「,」が使われる。

d.to_csv('book2.csv', index=False, header=False, sep='\t')

すると、「,」からタブ文字に変わった。

2019-3-19       山田    170     65.3
2019-4-15       秋元    175     72.5
2019-8-30       鈴木    183     78.1
2019-10-15      田川    164     70.0

3. 応用

・read_csv, to_csvには、まだまだいろいろな I/F仕様がある。
 → 追々追記して行こう。

参考

ありがとうございます。 m(_ _)m
https://qiita.com/ysdyt/items/9ccca82fc5b504e7913a


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です