はじめに
CSVファイルは、データ分析や機械学習などの分野でよく使われます。Pythonには、CSVファイルを読み込むためのライブラリとして、numpyとpandasがあります。本記事では、numpyとpandasを使ったCSVファイルの列指定による読み込み方法と、行指定による読み込み方法について解説します。
numpyを使ったCSVファイルの列指定による読み込み
numpyを使ったCSVファイルの読み込みは、以下のように行います。
import numpy as np # CSVファイルの読み込み data = np.loadtxt('example.csv', delimiter=',', skiprows=1, usecols=(0,2,4)) print(data)
ここでは、delimiterで区切り文字を指定し、skiprowsで読み込みをスキップする行数を指定し、usecolsで読み込む列を指定しています。上記の例では、1行目をスキップして、0列目、2列目、4列目を読み込んでいます。
また、CSVファイルのデータ型が異なる場合は、dtypeオプションでデータ型を指定することもできます。
import numpy as np # CSVファイルの読み込み data = np.loadtxt('example.csv', delimiter=',', skiprows=1, usecols=(0,2,4), dtype={'names': ('name', 'age', 'gender'), 'formats': ('S10', 'i4', 'S10')}) print(data)
ここでは、dtypeオプションで、name列を文字列型、age列を整数型、gender列を文字列型として読み込んでいます。
pandasを使ったCSVファイルの列指定による読み込み
pandasを使ったCSVファイルの読み込みは、以下のように行います。
import pandas as pd # CSVファイルの読み込み df = pd.read_csv('example.csv', usecols=[0,2,4]) print(df)
ここでは、usecolsで読み込む列を指定しています。上記の例では、0列目、2列目、4列目を読み込んでいます。
pandasを使ったCSVファイルの読み込みは、numpyよりも高機能であり、列名や欠損値の処理なども簡単に行うことができます。
numpyとpandasの列指定読み込みの違いと使い分け
numpyとpandasの列指定読み込みの違いは、以下の通りです。
- numpyは、データ型が同じ場合に高速に読み込むことができますが、列名や欠損値の処理が煩雑です。
- pandasは、列名や欠損値の処理が簡単で、高機能ですが、numpyよりも遅い場合があります。
使い分けとしては、データ型が同じ場合はnumpyを、列名や欠損値の処理が必要な場合はpandasを使うと良いでしょう。
CSVファイルの行指定による読み込み
CSVファイルの行指定による読み込みは、以下のように行います。
import pandas as pd # CSVファイルの読み込み df = pd.read_csv('example.csv', nrows=10) print(df)
ここでは、nrowsで読み込む行数を指定しています。上記の例では、10行を読み込んでいます。
行指定読み込みの応用例
行指定読み込みは、大量のデータがある場合に、一部のデータだけを読み込むことができるため、メモリの節約にもなります。
また、行指定読み込みは、データの前処理などを行う際にも有用です。例えば、以下のように、特定の条件を満たす行だけを読み込んで、加工することができます。
import pandas as pd # CSVファイルの読み込み df = pd.read_csv('example.csv') # 条件を満たす行だけを抽出 df2 = df[df['age'] >= 20] # 平均年齢を計算 mean_age = df2['age'].mean() print(mean_age)
ここでは、age列が20以上の行だけを抽出して、平均年齢を計算しています。
エラーが起きたときの対処法
CSVファイルの読み込みでエラーが起きた場合は、以下のような対処法があります。
- 区切り文字が違う場合は、delimiterオプションで区切り文字を指定し直します。
- 行数が多すぎる場合は、skiprowsやnrowsオプションで読み込む行数を減らします。
- データ型が違う場合は、dtypeオプションでデータ型を指定し直します。
- ファイルの文字コードが違う場合は、encodingオプションで文字コードを指定し直します。
まとめ
CSVファイルの読み込みには、numpyとpandasを使うことができます。numpyは、データ型が同じ場合に高速に読み込むことができますが、列名や欠損値の処理が煩雑です。pandasは、列名や欠損値の処理が簡単で、高機能ですが、numpyよりも遅い場合があります。また、行指定読み込みは、大量のデータがある場合に、一部のデータだけを読み込むことができるため、メモリの節約にもなります。