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