Pandasについて

機械学習

ファイルを読み込む

txtとcsvは呼び出す関数は同じだが区切り文字が異なっているので使う時に意識する。 カンマ、タブでない場合は「sepまたはdelimiter」で区切り文字が設定可能である。

txt: read_table()

区切り文字がタブ「 \t 」である。

import pandas as pd
df = pd.read_table('File_Path/sample.txt')

csv: read_csv()

区切り文字がタブ「 , 」である。

import pandas as pd
df = pd.read_csv('File_Path/sample.csv')

parquet: read_parquet()

import pandas as pd
df = pd.read_parquet('File_Path/sample.parquet')

json: read_json()

import pndas as pd
df = pd.read_json('File_Path/sample.json')

JSONLを読む込場合はオプションをつける
df = pd.read_json('File_Path/sample.json', lines=True)

引数

  • headerなし: 「 , header=None 」
  • header指定: 「 , header=始めたい行番号を指定 」
  • indexなし: 「 , index=Flase 」
  • index指定: 「 , index_col=始めたい列番号を指定 」
  • 特定の列指定: 「 , usecols=[読み込む列番号/名を指定] 」

複数ファイルを読み込む

同じような名前のファイルを一気に読み込んで参照したい時がある。 その際の対応方法が下記となる。

import pandas as pd
from glob import glob

all_files = glob('PATH')
list = []

for file in all_files:
    # xxx部分は読込ファイルに合わせて変更
    list.append(pd.read_xxx(file))

df = pd.concat(list)

ファイルを出力する

csv

import pandas as pd
df = pd.read_csv('sample.csv', header=None)
df.to_csv('new_sample.csv', header=None, encoding='utf-8')

文字列を抽出(完全/部分一致)

文字列抽出

pandas.DataFrameで行を抽出(選択)して新しいpandas.DataFrameを取得する。 文字列要素を持つ列に対して抽出した条件に応じた真偽値boolリストを使うことで望む行を抽出できる。

完全一致

「 == 」を使う。 要素が指定した文字列と完全一致すると「True」となるpandas.seriesを取得する。

print(df['name'] == 'tanaka')
# 0 True 
# 1 False
# 2 Flase
# Name: name, dtype: bool

部分一致

  • str.contains(): 特定文字列を含む
  • str.endwsith(): 特定文字列で終わる
  • str.startwith(): 特定文字列で始まる
  • str.match(): 正規表現パターンに一致
# str.contains(): 特定文字列を含む
## 引数na : 欠損値だとNaNで返却される結果を置き換える値にすることができる。
## 引数case : 大文字小文字は区別して処理されるがFalseで指定すると区別されなくなる。
## 引数regex : 第一引数に指定した文字列はデフォルトで正規表現パターンとして処理されるがFalse指定することで特殊文字そのものが含まれているかを処理する。
print(df['name'].str.contains('sa', na=True, case=False, regex=False))
=> 結果
0 True
1 False
2 True
3 Nan => True
Name: name, dtype: bool

# str.endwsith(): 特定文字列で終わる
## 要素が特定文字列で終わるとTrueでpandas.Seriesとなる。
### 引数na, caseのみ
### 第一引数文字列がそのまま判定に使われる
print(df['name'].str.endswith('e'))
=> 結果
0 True
1 False
2 True
Name: name, dtype: bool

# str.startwith(): 特定文字列で始まる
## 要素が特定文字列で始めるとTrueでpandas.Seriesとなる。
### 引数na
### 第一引数文字列がそのまま判定に使われる
print(df['name'].str.startswith('B'))
=> 結果
0 True
1 True
2 False
Name: name, dtype: bool

# str.match(): 正規表現パターンに一致
## 要素が正規表現パターンが一致するとTrueでpandas.Seriesとなる。
### 文字列先頭がパターンマッチするか判定をする。
### 先頭がマッチしないとFalseとなる。
print(df['name'].str.match('.*i.*e'))
=> 結果
0    True
1    False
2    True
Name: name, dtype: bool

重複データ処理

抽出: duplicated()

削除: drop_duplicates()

dtype

サポートされている種類は次の通り。 下記以外だとエラーが発生する。

# 'b'       boolean
# 'i'       (signed) integer
# 'u'       unsigned integer
# 'f'       floating-point
# 'c'       complex-floating point
# 'O'       (Python) objects
# 'S', 'a'  (byte-)string
# 'U'       Unicode
# 'V'       raw data (void)

# DataFrameに対して使う。
df[test].dtype => dtype('O')

参考サイト