見出し画像

Pandas でよく忘れてしまう事柄(随時追加)

Pythonを使ったデータ解析をする際によく忘れてgoogle検索しがちなものを下記に書き留めておく(随時追加予定)

Excelファイルのimport(read_excel)

'xlrd'をインストールすると下記方法でxlsxファイルをデータフレームとして読み込み可能

pd.read_excel('filename.xlsx')

Excelファイルのexport(to_excel)

下記でデータフレーム(df) をファイル(output_file.xlsx)に書き出
(index = False でインデックスを除外)

df.to_excel('output_file.xlsx', index = False)

ファイル名に日付/時間(アジア圏)を挿入

from datetime import datetime
from pytz import timezone

date_now = datetime.now(timezone('Asia/Tokyo')).strftime("%Y%m%d_%H%M")

print(date_now)

 日付と時間(YYMMDD_HHMM)が出力されるはず。
dataframe (df) を'filename_yymmdd_HHMM.xlsx'という名前に出力する:

df.to_excel('filename_' + date_now +'.xlsx') 

--end--(06/03/2019)

データ概要を見る

行・列の数df.shape

df.shape

データの概要df.info()

df.info()

(数値)データの統計量(count, mean, std, etc)

df.describe()

(文字)データの統計量(df.describe())

count:データの数,unique:重複を除いたデータ数,top:最も多いデータ,freq:topのデータが含まれる数などを常時

df.describe(include='O') # 0(ゼロ)じゃなくてO(オー)

(数値・文字)データの統計

df.describe(include='all')

df.describe(include='all')

カラム・インデックスと特定の名前を変更(rename)

column名'a'を'colA'に変更

df.rename(columns={'A': 'Col_1'})

index名'a'を'ROWa'に変更

df.rename(index={'a': 'ROWa'}

カラム名取得・一括変更(df.columns)

df.columns

一括変更 (4列のデータフレームのそれぞれを'a',  'b',  'c',  'd'に変更する)

df.columns = ['a','b','c','d']

--end--(06/04/2019)

列情報の取得(unique(),nunique(),value_counts())

列'a'が含む変数の種類を調べる:unique()

df['a'].unique()

列'a'が含む変数の種類数を調べる:nunique()

df['a'].nunique()

列'a'に含まれるそれぞれの変数がいくつあるかを調べる: value_counts()

df['a'].value_counts()

--end--(06/05/2019)

インデックス振り直し(reset_index())

元のインデックスは新たなcolumnとして残る

df.reset_index()

元のインデックスを削除するには"drop=True"をつける

df.reset_index(drop=True)

--end--(04/28/2020)

NaN関連

df内のNaNを探す

df.isna().any() 

df内のNaNを特定の数字(例: 0)に変換

df.fillna(0)

df内のNaNを含む行を落とす

df.dropna(axis = 0)

--end--

dictionaryからdataframeへの変換

a = {'name':['a','b','c','d'],'value':[1,2,3,4]}  
df = pd.DataFrame(a)   

これで4行2列のdataframe作成ができる(下記)

In [6]: df                                                                                                                                  
Out[6]: 
    name  value
0    a      1
1    b      2
2    c      3
3    d      4

--end--

列と列のLog計算

● math モジュールのlog()をつかって計算
● log(x, a) x:変数,a:底を指定
● 下記例ではb列の各数値についてlog2(b)を計算した数値の列を新たに作成

# Data frameの作成
df = {'a':['a','b','c','d'],'b':[1,2,3,4]}
df = pd.DataFrame(df)
df
スクリーンショット 2020-05-12 11.29.50
# log2(x)の計算
import math
df['log2(b)'] = df['b'].apply(lambda x: math.log(x,2))
df
スクリーンショット 2020-05-12 11.31.15

(続き)四捨五入の方法

● Python3のround()は偶数に丸めるためのもので,四捨五入ではない
● Decimal()を使って四捨五入
Decimal(x).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))
xに四捨五入する数値を入れて,ケタ数をDecimal('x.xx')で指定する
● 数値はDecimal型(固定小数点数型)で出力される

# 例
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN
Decimal(0.3333333333).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
スクリーンショット 2020-05-12 11.42.27
# 例2:データフレーム内で列単位で四捨五入
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN
df['log2(b)'] = df['log2(b)'].apply(lambda x: Decimal(x).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))
df
スクリーンショット 2020-05-12 11.49.21

--end--(05/12/2020)

特定の文字で列を分割 (str.split)

●コロンなどの特定の記号で列を分割する

# データフレーム作成
df = {'a':['a:4','b:3','c:2', 'd:1'],'b':[1,2,3,4]}
df = pd.DataFrame(df)
df
スクリーンショット 2020-05-12 12.01.29
# コロンで分割
df = df['a'].str.split(':', expand=True)
df
# 複数の列に分割してデータフレームとして取得するには、引数expand=Trueを指定する
# bの行は消え, columnameが新たに0と1になる
スクリーンショット 2020-05-12 12.04.06

(続き)特定の文字を置き換える replace

● 列内の特定の文字を置き換える replace(a, b)
● cをYにdをZに置き換えるなど複数の場合は辞書を使う
replace({'c': 'Y', 'd': 'Z'})

df[0] = df[0].replace({'c':'Y', 'd':'Z'})
df
スクリーンショット 2020-05-12 12.11.09

--end--(05/12/2020)

この記事が気に入ったらサポートをしてみませんか?