Python構文ベースのDataFrame
19394 ワード
Pythonデータ分析はまずデータ洗浄処理を行う必要があり、多くのDataFrameやSeriesに関する知識に関連している.ここでは、関連する一般的な方法を整理し、主にデータの増減、インデックスの変更、数値置換などを設計する.いくつかの関数のパラメータはそろっていませんが、pandasドキュメントを参照するか、エディタで入力する方法+?クエリー(df.reindexなど)、実践は知識レベルを検証する最良の道である.
ドキュメントディレクトリ: インデックス を変更データ削除 列全体 を削除行全体 を削除重複行削除 欠落値を含む行/列削除 データ置換 欠落値置換 その他の値置換 データインデックス ラベルインデックスloc 位置インデックスiloc 論理選択 により
データソート
索引の変更新しいインデックス(行列)reindexを作成する:新しいインデックスを再作成すると、元のデータは新しいインデックスに基づいて並べ替えられ、インデックス値が存在しない場合、欠落した値が導入され、元のインデックスに対応する値は 変化しません.インデックスにrenameを再命名するには、辞書と組み合わせてインデックスの一部を再命名するか、関連関数と組み合わせてインデックス全体を に再命名することができます. 1 1列または複数列を行インデックスset_に変更index ローインデックスをDataFrameの列reset_に変更index
データ削除
主に複数の形式での行列の削除を含む
列全体を削除 delで削除、元のDataFrameで直接修正削除 dropメソッドで削除し、削除後のレプリケーションバージョンに戻り、元のDataFrame は変更されません.
行全体を削除
重複行の削除はduplicated()を繰り返し判断し、各行が前に繰り返すか否かを示すブール型のSeriesを返し、繰り返しはTrue を表示する.
この方法は、subset=[‘列名’]を設定して1列または複数列から重複値を判断し、keep=’last’を設定して重複項目の最後の項目にFalseを表示させ、残りはTrueとsum関数を組み合わせて迅速に判断することができ、その行に重複値があるかどうか、sumが返す数値は重複行の数であるはSeriesのisを使用することもできます.Uniqueメソッドは、Seriesのvaluesが独立しているか否かを判定する、重複していない場合はTrue に戻る単一列に重複値があるか否かを判定する.繰返し値の削除drop_を使用Duplicatesメソッドは、重複行を削除するDataFrameを返し、元のDataFrame は変更しません.
欠落した値を含む行/列の削除欠落データをフィルタ除去するにはdropnaが一般的に使用され、削除後のレプリケーションバージョンに戻り、元のDataFrame は変更されません.
またdropnaには(thresh=None,subset=None,inplace=False)の3つのパラメータがあり,欠落値削除数のしきい値をそれぞれ制御し,subsetに基づいてカラム名の空値削除と元のDataFrameに取って代わるか否かを指定する.
データ置換
欠落した値の置換欠落値置換はfillna を用いることができる.
また、axis、limit、inplaceパラメータは、軸、前後の置換のしきい値、置換の有無をそれぞれ設定します.
その他の値の置換 replace置換
データ索引
ラベルインデックスloc行インデックス カラムインデックス 行列共通インデックス
位置インデックスiloc行インデックス カラムインデックス 行列同時インデックス
論理的に選択
データのソートインデックス順sort_index 値でソートsort_values
ドキュメントディレクトリ:
import pandas as pd
import numpy as np
df = pd.DataFrame({'name':['James','Curry','James','Kobe','Wade'],
'age':[31,30,31,35,38],
'score':[18,25,18,17,15],
'block':[5,2,5,3,2]},index = ['player1','player2','player3','player4','player5'])
print(df)
age block name score
player1 31 5 James 18
player2 30 2 Curry 25
player3 31 5 James 18
player4 35 3 Kobe 17
player5 38 2 Wade 15
索引の変更
# inplace = True dDataFrame ,
df_reindex = df.reindex(columns = ['name','age','block','score','reb'],
index = ['player1','player2','player3','player4','player5','player6'])
print(df_reindex)
name age block score reb
player1 James 31.0 5.0 18.0 NaN
player2 Curry 30.0 2.0 25.0 NaN
player3 James 31.0 5.0 18.0 NaN
player4 Kobe 35.0 3.0 17.0 NaN
player5 Wade 38.0 2.0 15.0 NaN
player6 NaN NaN NaN NaN NaN
#
new_index = {'player1':'PLAYER1'}
new_col = {'name':'Name','age':'Age'}
df_rename_dict = df.rename(index = new_index,columns = new_col) # inplace = True DataFrame ,
print(df_rename_dict)
Age block Name score
PLAYER1 31 5 James 18
player2 30 2 Curry 25
player3 31 5 James 18
player4 35 3 Kobe 17
player5 38 2 Wade 15
#
df_rename_fun = df.rename(columns = str.title)
print(df_rename_fun)
Age Block Name Score
player1 31 5 James 18
player2 30 2 Curry 25
player3 31 5 James 18
player4 35 3 Kobe 17
player5 38 2 Wade 15
# map , DataFrame
df.columns = df.columns.map(str.title)
df.index = df.index.map(str.upper)
print(df)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Curry 25
PLAYER3 31 5 James 18
PLAYER4 35 3 Kobe 17
PLAYER5 38 2 Wade 15
#
df_set1index = df.set_index(['Name'])
print(df_set1index)
Age Block Score
Name
James 31 5 18
Curry 30 2 25
James 31 5 18
Kobe 35 3 17
Wade 38 2 15
# , DataFrame , drop = False
df_set2index = df.set_index(['Name','Block'],drop = False)
print(df_set2index)
Age Block Name Score
Name Block
James 5 31 5 James 18
Curry 2 30 2 Curry 25
James 5 31 5 James 18
Kobe 3 35 3 Kobe 17
Wade 2 38 2 Wade 15
df_rIdx = df.reset_index()# drop = False, index
print(df_rIdx)
index Age Block Name Score
0 PLAYER1 31 5 James 18
1 PLAYER2 30 2 Curry 25
2 PLAYER3 31 5 James 18
3 PLAYER4 35 3 Kobe 17
4 PLAYER5 38 2 Wade 15
データ削除
主に複数の形式での行列の削除を含む
列全体を削除
df2 = df.copy()
print(df2)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Curry 25
PLAYER3 31 5 James 18
PLAYER4 35 3 Kobe 17
PLAYER5 38 2 Wade 15
# del
del df2['Age']
print(df2)
Block Name Score
PLAYER1 5 James 18
PLAYER2 2 Curry 25
PLAYER3 5 James 18
PLAYER4 3 Kobe 17
PLAYER5 2 Wade 15
# drop , axis = 0, axis = 1
df2_drop = df2.drop(['Block','Score'],axis = 1)
print(df2_drop)
Name
PLAYER1 James
PLAYER2 Curry
PLAYER3 James
PLAYER4 Kobe
PLAYER5 Wade
行全体を削除
df3 = df.copy()
print(df3)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Curry 25
PLAYER3 31 5 James 18
PLAYER4 35 3 Kobe 17
PLAYER5 38 2 Wade 15
# drop axis = 0,
df3_drop = df3.drop(['PLAYER1'])
print(df3_drop)
Age Block Name Score
PLAYER2 30 2 Curry 25
PLAYER3 31 5 James 18
PLAYER4 35 3 Kobe 17
PLAYER5 38 2 Wade 15
重複行の削除
df.duplicated()
PLAYER1 False
PLAYER2 False
PLAYER3 True
PLAYER4 False
PLAYER5 False
dtype: bool
この方法は、subset=[‘列名’]を設定して1列または複数列から重複値を判断し、keep=’last’を設定して重複項目の最後の項目にFalseを表示させ、残りはTrueとsum関数を組み合わせて迅速に判断することができ、その行に重複値があるかどうか、sumが返す数値は重複行の数である
df.duplicated().sum() Out:1
df['Name'].is_unique
False
df3_drop['Name'].is_unique
True
#
df_d = df.drop_duplicates()
print(df_d)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Curry 25
PLAYER4 35 3 Kobe 17
PLAYER5 38 2 Wade 15
# , , keep = 'last' , inplace = True DataFrame
df_d2 = df.drop_duplicates(subset = ['Block'],keep = 'last')
print(df_d2)
Age Block Name Score
PLAYER3 31 5 James 18
PLAYER4 35 3 Kobe 17
PLAYER5 38 2 Wade 15
欠落した値を含む行/列の削除
df_data = df.copy()
df_data.iloc[1,2] = np.nan
df_data.iloc[2] = np.nan
print(df_data)
Age Block Name Score
PLAYER1 31.0 5.0 James 18.0
PLAYER2 30.0 2.0 NaN 25.0
PLAYER3 NaN NaN NaN NaN
PLAYER4 35.0 3.0 Kobe 17.0
PLAYER5 38.0 2.0 Wade 15.0
# NaN ,
data_drop = df_data.dropna()
print(data_drop)
Age Block Name Score
PLAYER1 31.0 5.0 James 18.0
PLAYER4 35.0 3.0 Kobe 17.0
PLAYER5 38.0 2.0 Wade 15.0
# NaN , how = 'all'
data_drop2 = df_data.dropna(how = 'all')
print(data_drop2)
Age Block Name Score
PLAYER1 31.0 5.0 James 18.0
PLAYER2 30.0 2.0 NaN 25.0
PLAYER4 35.0 3.0 Kobe 17.0
PLAYER5 38.0 2.0 Wade 15.0
# , axis = 1
data_drop3 = data_drop2.dropna(axis = 1)
print(data_drop3)
Age Block Score
PLAYER1 31.0 5.0 18.0
PLAYER2 30.0 2.0 25.0
PLAYER4 35.0 3.0 17.0
PLAYER5 38.0 2.0 15.0
またdropnaには(thresh=None,subset=None,inplace=False)の3つのパラメータがあり,欠落値削除数のしきい値をそれぞれ制御し,subsetに基づいてカラム名の空値削除と元のDataFrameに取って代わるか否かを指定する.
データ置換
欠落した値の置換
#
df_1v = df_data.fillna(0)
print(df_1)
Age Block Name Score
PLAYER1 31.0 5.0 James 18.0
PLAYER2 30.0 2.0 NaN 25.0
PLAYER3 30.0 10.0 NaN NaN
PLAYER4 35.0 3.0 Kobe 17.0
PLAYER5 38.0 2.0 Wade 15.0
#
df_dict = df_data.fillna({'Age':30,'Block':10})
print(df_dict)
Age Block Name Score
PLAYER1 31.0 5.0 James 18.0
PLAYER2 30.0 2.0 NaN 25.0
PLAYER3 30.0 10.0 NaN NaN
PLAYER4 35.0 3.0 Kobe 17.0
PLAYER5 38.0 2.0 Wade 15.0
# method = 'ffill' method = 'bfill'
df_m = df_data.fillna(method = 'ffill')
print(df_m)
Age Block Name Score
PLAYER1 31.0 5.0 James 18.0
PLAYER2 30.0 2.0 James 25.0
PLAYER3 30.0 2.0 James 25.0
PLAYER4 35.0 3.0 Kobe 17.0
PLAYER5 38.0 2.0 Wade 15.0
また、axis、limit、inplaceパラメータは、軸、前後の置換のしきい値、置換の有無をそれぞれ設定します.
その他の値の置換
#
# Curry、kobe Stephen
df_replace = df.replace(['Curry','Kobe'],'Stephen')
print(df_replace)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Stephen 25
PLAYER3 31 5 James 18
PLAYER4 35 3 Stephen 17
PLAYER5 38 2 Wade 15
#
# Curry Stephen, Kobe Bryant
df_reDict = df.replace({'Curry':'Stephen','Kobe':'Bryant'})
print(df_reDict)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Stephen 25
PLAYER3 31 5 James 18
PLAYER4 35 3 Bryant 17
PLAYER5 38 2 Wade 15
#
# Curry Stephen, Kobe Bryant
df_reList = df.replace(['Curry','Kobe'],['Stephen','Bryant'])
print(df_reList)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Stephen 25
PLAYER3 31 5 James 18
PLAYER4 35 3 Bryant 17
PLAYER5 38 2 Wade 15
データ索引
ラベルインデックスloc
print(df)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Curry 25
PLAYER3 31 5 James 18
PLAYER4 35 3 Kobe 17
PLAYER5 38 2 Wade 15
#
df.loc['PLAYER1']
#
df.loc[['PLAYER1','PLAYER3']]# ,
#
df.loc['PLAYER1':'PLAYER3'] #
#
df['Age']
#
df[['Age','Name']]# ,
# loc
df.loc[:,'Name']
PLAYER1 James
PLAYER2 Curry
PLAYER3 James
PLAYER4 Kobe
PLAYER5 Wade
Name: Name, dtype: object
df.loc['PLAYER2',['Age','Name']]
Age 30
Name Curry
Name: PLAYER2, dtype: object
位置インデックスiloc
#
df.iloc[1]
#
df.iloc[1:3] #
#
df.iloc[:,1]
#
df.iloc[:,1:3] #
df.iloc[0:2,2:4]
論理的に選択
df_logic = df[df['Score']>17]
print(df_logic)
Age Block Name Score
PLAYER1 31 5 James 18
PLAYER2 30 2 Curry 25
PLAYER3 31 5 James 18
データのソート
# axis , ascending
df_sort = df.sort_index(axis = 1,ascending = False)
print(df_sort)
Score Name Block Age
PLAYER1 18 James 5 31
PLAYER2 25 Curry 2 30
PLAYER3 18 James 5 31
PLAYER4 17 Kobe 3 35
PLAYER5 15 Wade 2 38
# ascending
df_sort2 = df.sort_values(by = ['Age','Score'])
print(df_sort2)
Age Block Name Score
PLAYER2 30 2 Curry 25
PLAYER1 31 5 James 18
PLAYER3 31 5 James 18
PLAYER4 35 3 Kobe 17
PLAYER5 38 2 Wade 15