Pythonのpandas


Dataframeとseries操作
1、dataframeデータを取る
1) iterrows()
for index_, row in df1.iterrows():
    print(index_)
    print(row, row.values[0])

iterrows()はdataframeまたはseriesを行ごとに巡回し、行インデックスと行値の2つの要素を返します.行値はSeries形式で、listインデックスに基づいて特定の数値を取得できます.結果:
2) itertuples()
itertuplesは、各行にnamedtupleを生成し、行のインデックス値をメタグループの最初の要素、pandasタイプとします.
for nametuple in df1.itertuples():
        print(nametuple)
        print(nametuple[0], type(nametuple))

3)dataframeある列の値でデータをとる
temp_df[temp_df.c1 == 'aa']['c2']

Dataframeオブジェクトtemp_dfのc 1列値がaaの場合temp_dfのc 2列の値;
4)dataframeカラム値に基づいて行インデックスをとる
temp_df[temp_df.c1 == 'aa'].index.to_list()

temp_dfのc 1列値がaaの場合temp_dfの行のインデックス;
5)dataframe行インデックスとカラム名に基づいてdataframeの値を変更する
final_result.loc[10, 'c1'] = abc

final_resultの10行c 1列の値をabcに変更します.
6)dataframeはカラム名に基づいて値をとる
sorted(list(set(pre_result['c3'].to_list())))

リストフォーマットを返し、set()を削除し、リスト()をリストフォーマットに変更し、sorted()をソートします.
7)dataframeの部分列を取る
df_after[['c1', 'c3', 'c6']]

8) dataframe.loc[0]-数値型行インデックスの値から値を取り、
print(retemp.loc[0])
retemp:
    asset_return  asset_vol
0             1          2
1            11         12

output:
asset_return    1
asset_vol       2

9) dataframe.iloc[1]-行順に値を取り、i行目を取り、0から
retemp:
           asset_return
asset_vol             
b                    a
ee                  dd

output:
asset_return  dd
asset_vol     ee

2、索引
1)カラム名またはインデックス名の変更
df_after = df_after.rename(columns={base_type: 'values'})

列名の変更base_typeは「values」です.
2) dataframe.set_Index('turn')--return列の値を新しい行インデックスとして使用します.
print(retemp, '
', retemp.set_index('return'))

output:
        return asset_vol
0            a         b
1           dd        ee 

           return
asset_vol    
b            a
ee           dd 

3) dataframe.reset_index()
ローインデックスを数値インデックスにリセットし、パラメータdrop=Trueで元のインデックス列が失われ、パラメータinplace=Trueで元のdfが変更されfalseの場合、新しいdfが返されます
output: (drop=False)
   index    return      vol
0      0            a         b
1      1           dd        ee

output: drop=True
        return      vol
0            a         b
1           dd        ee

retemp:
                return
vol             
b                    a
ee                  dd 
print(retemp.reset_index(inplace=False))
print(retemp)

output:inplace=Falseの場合に返される結果
   index return vol
0      0            a         b
1      1           dd        ee

元retempは変わらない
            return   vol
0            a         b
1           dd        ee

3、 drop_duplicates(self, keep='first', inplace=False)
seriesの重複を削除
4、dataframeのapply方法
5、 np.asarray(a, dtype=None, order=None)
入力を配列に変換
6、dataframeが指定した列を演算し、列名を同じにする
res_df['q'] = res_df['q'] / df['q']

res_dfとdfのq列除去
7、dataframeのデータがNaNかどうかを判断する
temp_df[temp_df.c1 == cc_]['c2'] is np.NaN

8、 pd.concat()
接続dataframeは、カラムインデックスが異なる場合があり、接続後の結果は元のdfのローインデックスを保持し、2つのdfのカラム数が異なる場合はNaNが埋め込まれます.
df = pd.concat([df1, df2])

input:
      Q1    Q2    
0  asset  path    
1  asset  path    
2  asset  path    
3  asset  path    
       Q1         Q2           Q3
0  quater  0.6641355  0.664235635
1  quater  0.6641355  0.664235635
2  quater  0.6641355  0.664235635
3  quater  0.6641355  0.664235635
4  quater  0.6641355  0.664235635    

output:
       Q1         Q2           Q3
0   asset       path          NaN
1   asset       path          NaN
2   asset       path          NaN
3   asset       path          NaN
0  quater  0.6641355  0.664235635
1  quater  0.6641355  0.664235635
2  quater  0.6641355  0.664235635
3  quater  0.6641355  0.664235635
4  quater  0.6641355  0.664235635

9、印刷するデータの小数点以下の桁数を設定する
pd.set_option('precision', 10)

10、辞書はdataframeを回して、データフォーマットを設定する
data1 = {'Q1': ['0.1', '0.2', 0.3],
            'Q2': [1, 2, '3']}
df1 = pd.DataFrame(data1, dtype=np.float)

11、df.shift(n)
Dataframe n行を下に移動
12、操作ファイル
(一)to_Excel()は保存するsheetを選択できます
writer = pd.ExcelWriter('df2.xlsx',)
df1.to_excel(writer, index=False, sheet_name='aaa')

(二)to_csv(),mode='a'--書き込みのモードを設定する:追加
1回の書き込み
df1.to_csv(path_or_buf=file_name, index=False, mode='a')
支店書き込み、newline='--空白行を削除
with open("test0.csv", "a+", newline='') as csvfile:
    writer = csv.writer(csvfile, dialect='excel')
    #    columns_name
    writer.writerow(['Q1', "Q2", "Q3", "Q3"])
    for i in range(len(column1)):
    #      writerows
    writer.writerow([column1[i], column2[i], column3[i], column4[i]])

(3)csvファイルを読むのはdataframeで、header=None:csvファイルに列名が含まれていないことを示し、names=[]:dfの列名を設定する
df_after = pd.read_csv(filepath_or_buffer=file_name, header=None, names=['c1', 'c2', 'c3', 'c4'])

13、pivot関数
Dataframe行列の交換では、index、columns、valuesの3つのパラメータを受信できます.indexは変換後のDataFrameオブジェクトの縦インデックスを指定し、columnsは変換後のDataFrameオブジェクトの横インデックスまたは列名を指定し、valuesは変換後のDataFrameオブジェクトの値を指定します.
14、pd.merge()関数
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
          left_index=False, right_index=False, sort=False,
          suffixes=('_x', '_y'), copy=True, indicator=False,
          validate=None)

役割:2つのdataframeオブジェクトを接合し、パラメータleft、right、on、how、sortなどのパラメータで複数の接合方式を設定できます.left/right:接続するdataframeの左右の順序を設定します.on:接合dataframeの接続キーを設定するには、接合する2つのdataframeの中に同時に存在する必要があります.リストで、同時に複数の列を押して接合することを示すことができます.left_on=/right_on=:接合する2つのdataframeの接続キーをそれぞれ設定し、異なることができます.how:接合方式,'left','right','outer','inner'を設定します.sort:結果データFrameを辞書順に接続キーでソートします.
15.Pandasの集約とグループ化
15.1 GroupBy
1)groupbyを使用してdataframeをカラム名、インデックスでグループ化する
次に,パケットのデータに対して平均値,分散などを求めて計算する.
Grouped = df.groupby[‘column_name’]

変数groupedはGroupByオブジェクトであり、実際には複数のオブジェクトに同時に送信される計算は行われていません.dfはcolumn_に従います.2とcolumn_3 2段階グループ化しcolumn_を求める1の平均値.
Grouped = df[‘column_1’].groupby([df[‘column_2’],df[‘column_3’]]).mean()

size()メソッドを使用して、各パケットのデータサイズを表示します.
2)Group Byオブジェクトは反復をサポートする
パケット名とデータブロックからなる二元グループのセットが生成され、データブロックのインデックスは元のdataframeと一致する.
for name_, group_df in df_res.groupby('path'):
        print(name _)
        print(group_df)

複数キーの場合、タプルの最初の要素はキー値からなるタプルになります.
for (k1, k2), group_df in df.groupby(['key1', 'key2']):
     print(k1, k2)
     print(group_df)

3)groupbyのデフォルトはaxis=0でグループ化されており、設定によって他の任意の軸でグループ化することもできます
grouped = df.groupby(df.dtypes, axis=1)
4)グループ情報は辞書であってもよい
          a         b         c         d         e
1     0.306336 -0.139431  0.210028 -1.489001 -0.172998
2   0.998335  0.494229  0.337624 -1.222726 -0.402655
3     1.415329  0.450839 -1.052199  0.731721  0.317225

mapping{'a':'group 1','c':'group 2','b':'group 1','e':'group 1','d':'group 2','f':'group 3'}dataframeの列を辞書のキー値ペアでマッピングし、複数の列を同じキー値にマッピングし、辞書に入力してキー値に基づいてグループ化することができます.
by_column = df1.groupby(mapping, axis=1)
by_column.sum()
     group2       group1
1    -1.278973 -0.006092
2  -0.885102  1.089908
3     0.731721  1.732554