はじめに
社内開発タスクでpandasを使う機会が何度かあったのですが、
そんなに頻繁でもないのであれどうやるんだっけとか、
そもそもどうやるんだっけとかが多いです。
また、性質上数GBのデータを扱う機会が多いので、
そういった場合にも対応できるような方法を随時更新していこうと思います。
そのため、構成としてはやりたいこと⇒やりかたといった形で記載します。
ちなみにゴリゴリ機械学習をやってるとかではないため、
その辺の話はでてきませんのでご了承ください。
csvの読み込み
そもそもcsvを読み込めないと何にもできません。
ので読み込み方から。
基本は以下で大丈夫。
df = pd.read_csv("ファイル名")
大容量ファイルの読み込み
ただ、ファイルサイズがGBの世界になってくると、
メモリに乗り切らないといった可能性が上がってきます。
そういった場合にはchunksizeオプションをつけて分割して読み込みしてあげましょう。
なお、chunksizeを指定した場合、
Dataframeではなく、TextFileReader インスタンスというもので読み込まれます。
TextFileReaderはループで回してあげれば、DataFrameを取り出すことが可能。
以下の例でいくと50行ずつ取り出してPrintされる。
data = pd.read_csv("test.csv", chunksize=50)
for i in data:
print(i)
オプション
オプション名 | 意味 | 例 |
---|---|---|
encoding | 文字コードの指定 | encoding='UTF-8' |
skiprows | 読み飛ばす行を指定 | skiprows=2 |
chunksize | 指定した行数毎に読み込み | chunksize=50 |
usecols | 指定した列のみ読み込み | usecols=[1, 3] |
2データの連結
別々のファイルをそれぞれ読み込んで連結する方法
# ファイル1読み込み
Data1 = pd.read_csv(file1, dtype = np.float32)
# ファイル2読み込み
Data2 = pd.read_csv(file2, dtype = np.float32)
# 2データを連結
rawData = pd.concat([Data1, Data2], ignore_index=True)
特定の列を取得する
df['A']
特定の区間の行を抽出する
df[1:3]
行は0から始まるので、この場合1行目は取得できないので注意。
また、:3は2までの意味合いです。
不要なカラムの削除
inplace=Trueの指定で元のdataframeが変更される。
以下の例ではDataからCity,Priceカラムがなくなる。
df.drop(columns=['City', 'Price'], axis = 1, inplace=True)
列番号で指定も可能
df.drop(columns=[[1, 2]], axis = 1, inplace=True)
行の削除
df.drop(df.index[[1, 3, 5]])
なお、デフォルトでは行のindexは0から連番になっているが、
sortなどをかけたあとだとindexが連番ではなくなるので注意。
特定カラムの置換
df.replace({列名: {元の値: 置換後の値}})
ある列の値でデータの分割
列の値で処理を変える場合に使う。
GroupBy オブジェクトを返してくれるため、そのままfor文でがちゃがちゃできる。
for カラムの値, データフレーム in df.groupby('カラム名'):
各処理
なお、indexは飛び飛びになるので、
各データフレームでindexを貼り直す場合はreset_index()を使う。
※drop=True を指定しなければ、旧インデックスがデータ列に移動するので注意。
for city,sdf in df.groupby('city'):
sdf.reset_index(drop=True)
if city = 'Tokyo':
flags = 1
レコード数のカウント
1列目の配列の要素数を返却。
[0]なしだと行列をそれぞれカウント。
pd.shape[0]
平均
means = df.mean(axis = 0)
標準偏差
std = df.std(axis = 0)
csvの保存
dataframeの加工後csvとして保存する場合は以下。
df.to_csv("ファイル名")
オプション名 | 意味 | 例 |
---|---|---|
columns | 特定列のみ書き出し | columns=['age'] |
header | ヘッダーの有無 | header=False |
index | インデックスの有無 | index=False |
pandasでcsvファイルの書き出し・追記(to_csv)
参考
PandasとNumPyの違いと使い分け方
カラムの値でDataFrameをグループ分割 - pandas
pandas.DataFrameの行・列を指定して削除するdrop
pandasでcsv/tsvファイル読み込み(read_csv, read_table)
DataFrame のインデックスを reset_index で振り直す-python