どうもヒノマルクです。
今日はCSVをpandasで読み込みたいと思います。
データは下記のようなものを準備しました。
CSVファイル
ドラえもん,2112-9-3
野比 のび太,1964-8-7
源 静香,1964-5-2
骨川 スネ夫,1964-3-28
剛田 武,1964-6-15
ドラえもんの登場人物と誕生日(諸説あり)のデータです。
それでは確認していきましょう
pandasのバージョンを確認
import pandas as pd
pd.__version__
'1.3.4'
CSVを読み込む
pd.read_csv("/Users/hinomaruc/Desktop/notebooks/ドラえもん登場人物.csv")
ドラえもん 2112-9-3 0 野比 のび太 1964-8-7 1 源 静香 1964-5-2 2 骨川 スネ夫 1964-3-28 3 剛田 武 1964-6-15
おっとと、ヘッダーの設定をしていなかったので1番最初の行(ドラえもん)がヘッダーとして認識されてしまいました。
header=Noneを明示的に指定してあげて、ヘッダーがないことをプログラムに教えてあげます。
CSVを読み込む header=None
pd.read_csv("/Users/hinomaruc/Desktop/notebooks/ドラえもん登場人物.csv",header=None)
0 1 0 ドラえもん 2112-9-3 1 野比 のび太 1964-8-7 2 源 静香 1964-5-2 3 骨川 スネ夫 1964-3-28 4 剛田 武 1964-6-15
header=Noneを指定することによって、ドラえもんが一番最初の行として読み込まれました。
行列の選択はインデックスと言われるこの形でも出来ます。
index操作によるデータ抽出
df = pd.read_csv("/Users/hinomaruc/Desktop/notebooks/ドラえもん登場人物.csv",header=None)
# df.loc[row_indexer,column_indexer]
# 行は全てを選択、列はインデックス0を選択
df.loc[:,0]
0 ドラえもん 1 野比 のび太 2 源 静香 3 骨川 スネ夫 4 剛田 武 Name: 0, dtype: object
# 行は全てを選択、列はインデックス1を選択
df.loc[:,1]
0 2112-9-3 1 1964-8-7 2 1964-5-2 3 1964-3-28 4 1964-6-15 Name: 1, dtype: object
# 行はインデックス0-2を選択、列は全てを選択
df.loc[0:2,:]
0 1 0 ドラえもん 2112-9-3 1 野比 のび太 1964-8-7 2 源 静香 1964-5-2
このままだと少々分かりづらいので列名をつけてあげます。
CSV読み込み (列名付与)
# 列名をつけてあげるには namaesオプションを使ってあげます。
df = pd.read_csv("/Users/hinomaruc/Desktop/notebooks/ドラえもん登場人物.csv",header=None,names=["名前","誕生日"])
df
名前 誕生日 0 ドラえもん 2112-9-3 1 野比 のび太 1964-8-7 2 源 静香 1964-5-2 3 骨川 スネ夫 1964-3-28 4 剛田 武 1964-6-15
無事列名がつけれました。
ちなみにheaderがファイルに存在する場合で、列名を別途つけたい場合は、header=0とする必要があるそうです。
If the file contains a header row, then you should explicitly pass header=0 to override the column names
前のバージョンだと列名の指定はcolumns=とかだったと思うのですが、仕様変更したのかもしれません。動かないという方はバージョンをご確認ください。
参照元
・https://qiita.com/yuji38kwmt/items/1a30926f89c5c565ad4b
・https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html [
Indexing and selecting data — pandas 1.3.4 documentation]
・https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html [pandas.read_csv — pandas 1.3.4 documentation]