pandas基礎

dataframe和series操做

一、取dataframe數據

1) iterrows()

for index_, row in df1.iterrows():
    print(index_)
    print(row, row.values[0])

iterrows()按行遍歷dataframe或series,返回兩個元素:行索引和行值,其中行值爲Series格式,能夠根據list索引取具體的數值。
結果:數組

2) itertuples()

itertuples爲每一行產生一個namedtuple,而且行的索引值做爲元組的第一個元素,pandas類型。app

for nametuple in df1.itertuples():
        print(nametuple)
        print(nametuple[0], type(nametuple))

3) dataframe按某列的值取數據

temp_df[temp_df.c1 == 'aa']['c2']

dataframe對象temp_df的c1列值爲aa時temp_df的c2列的值;函數

4) dataframe根據列值取行索引

temp_df[temp_df.c1 == 'aa'].index.to_list()

temp_df的c1列值爲aa時,temp_df的行的索引;excel

5) dataframe 根據行索引和列名修改dataframe的值

final_result.loc[10, 'c1'] = abc

將final_result的10行c1列的值改成abc;code

6) dataframe根據列名取值

sorted(list(set(pre_result['c3'].to_list())))

返回list格式,set()去重,list()改回list格式,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

二、索引

1) 修改列名或索引名

df_after = df_after.rename(columns={base_type: 'values'})

修改列名base_type爲’values’。排序

2) dataframe.set_index('return')——將return列的值做爲新的行索引

print(retemp, '\n', 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沒有改變ci

return   vol
0            a         b
1           dd        ee

三、 drop_duplicates(self, keep='first', inplace=False)

刪除series的重複項input

四、 dataframe的apply方法

五、 np.asarray(a, dtype=None, order=None)

將輸入轉化爲數組

六、 dataframe指定的列作運算,列名要同樣

res_df['q'] = res_df['q'] / df['q']

res_df和df的q列相除

七、 判斷dataframe的數據是否爲NaN

temp_df[temp_df.c1 == cc_]['c2'] is np.NaN

八、 pd.concat()

拼接dataframe,列索引能夠不同,拼接後的結果會保留原df的行索引,當兩個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

九、設置打印的數據小數點位數

pd.set_option('precision', 10)

十、字典轉dataframe,設置數據格式

data1 = {'Q1': ['0.1', '0.2', 0.3],
            'Q2': [1, 2, '3']}
df1 = pd.DataFrame(data1, dtype=np.float)

十一、df.shift(n)

dataframe向下平移n行

十二、操做文件

(一)to_excel()能夠選擇要保存的sheet

writer = pd.ExcelWriter('df2.xlsx',)
df1.to_excel(writer, index=False, sheet_name='aaa')

(二)to_csv(),mode='a'——設置寫入的模式:添加

一次寫入

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]])

(三)讀csv文件爲dataframe,header=None:表示csv文件中不包含列名,names=[]:設置df的列名

df_after = pd.read_csv(filepath_or_buffer=file_name, header=None, names=['c1', 'c2', 'c3', 'c4'])

1三、pivot函數

對dataframe行列互換,能夠接收三個參數,分別是index、columns和values,其中index用來指定轉換後DataFrame對象的縱向索引,columns用來指定轉換後DataFrame對象的橫向索引或者列名,values用來指定轉換後DataFrame對象的值。

1四、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)

做用:拼接兩個dataframe對象,能夠經過參數left,right,on,how,sort等參數設置多種拼接方式。
left/right:設置待拼接dataframe的左右順序;
on:設置拼接dataframe的鏈接鍵,必須是待拼接的兩個dataframe中同時存在的,能夠是一個列表,表示同時按多列拼接;
left_on=/ right_on=:分別設置待拼接的兩個dataframe的鏈接鍵,能夠不一樣;
how:設置拼接方式,'left', 'right', 'outer', 'inner'。
sort: 按字典順序經過鏈接鍵對結果DataFrame進行排序。

1五、Pandas聚合和分組

15.1 GroupBy

1) 使用groupby對dataframe按照列名、索引分組

而後對分組的數據求均值、方差等計算。

Grouped = df.groupby[‘column_name’]

變量grouped是一個GroupBy對象,它實際上尚未進行任何計算
同時傳入多個對象:對df按照column_2和column_3兩級分組,而後求列column_1的均值。

Grouped = df[‘column_1’].groupby([df[‘column_2’],df[‘column_3’]]).mean()

使用size()方法查看每一個分組的數據大小。

2) GroupBy對象支持迭代

產生一組二元元組(由分組名和數據塊組成),其中數據塊的索引與原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': 'group1', 'c': 'group2', 'b': 'group1', 'e': 'group1', 'd': 'group2', 'f': 'group3'}
將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
相關文章
相關標籤/搜索