Pandas DataFrame 使用總結

Pandas 是一個很是好用的庫,總結一下 Pandas DataFrame 常見用法,在使用的時候能夠快速找到。

Pandas DataFrames 是具備帶標籤的行和列的二維數據結構,能夠存儲不少類型的數據。若是你熟悉 Excel 的話,能夠將 Pandas DataFrames 看作相似於電子表格。python

1、引入

import numpy as np
import pandas as pd

2、建立

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
c = ['a', 'b', 'c']
r = ['A', 'B', 'C']
df = pd.DataFrame(data=data,  columns=c, index=r)

3、排序

按列、行名排序

# 行名排序 降序
df.sort_index(axis=0, ascending=False)
# 列名排序 降序
df.sort_index(axis=0, ascending=False)

按值排序

拿出來排序

df["a"].sort_values(ascending = False)

df 內排序

df.sort_values( ['a', 'b', 'c'])

4、索引

位置索引

df.iloc[2] # 選擇第二行全部數據, 是Series類型
df.iloc[[2]] # 選擇第二行全部數據, 是DataFrame類型
df.iloc[:, 2] # 選擇第二列全部數據, 是Series類型
df.iloc[:, [2]] # 選擇第二列全部數據, 是DataFrame類型
df.iloc[:, 0:2] # 選擇0到2列全部數據
df.iloc[[2,3], 0:2] # 選擇2和3行, 0到2列全部數據
df.iat[1, 1] # 根據位置快速取出數據, 獲取單個數據推薦這種方法

自定義索引

df.loc['top'] # 選擇指定行數據, 是Series類型
df.loc[['top']] # 選擇指定行數據, 是DataFrame類型
df.loc[:, 'xm'] # 選擇指定列數據, 是Series類型(不推薦)
df.loc[:, ['xm']] # 選擇指定列數據, 是DataFrame類型(不推薦)
df.loc[:, ['bj','xm']] # 選擇多列數據(不推薦)
df.loc[:, 'bj':'xb'] # 選擇多列之間全部數據, 列切片只能用這種方法
df.loc[['top','count'], 'bj':'xb'] # 選擇指定行, 指定列數據
df.at['top', 'xm'] # 根據自定義索引快速取出數據, 獲取單個數據推薦這種方法

布爾索引

# 選取全部出生日期大於等於1998年的數據, 這裏是字符串比較
df[df['csrq']>='1998'] 
# 選取全部出生日期大於等於1997年小於1999年的數據
df[(df['csrq']>='1997')&(data['csrq']<'1999')]
# 選取全部出生日期大於等於1997年小於1999年的數據
df[df['csrq'].between('1997', '1999')]
# 選取全部出生日期大於等於1997年或者姓名爲張三的數據
df[(df['csrq']>='1997')|(data['xm']=='張三')]
# 另外一種選取方式(不推薦, 實測效率比上面低)
df[df.csrq>='1998'] 
# 選擇字段值爲指定內容的數據
df[df['xm'].isin(['張三','李四'])]

5、插入與刪除

# 假設cj列原本不存在, 這樣會在列尾添加新的一列cj, 值爲s(Series對象), 原地
df['cj'] = s 
# 在第1列位置插入一列dz(地址), 值爲s, 原地
df.insert(0, 'dz', s)
# 在df中添加內容爲df2(必須是DataFrame對象)的新列(添加列), 非原地 
df.join(df2)
 # 將df2中的行添加到df的尾部(添加行), 非原地
df.append(df2)
# 刪除單列, 並返回刪除的列, 原地
df.pop('xm')
# 刪除指定行, 非原地 
df.drop(1) 
# 刪除指定列, axis=1指第2維, axis默認0, 非原地
df.drop(['xm', 'xh'], axis=1)

6、DataFrame 重要方法與屬性

'''重要屬性'''
df.values # 查看全部元素的value
df.dtypes # 查看全部元素的類型
df.index # 查看全部行名
df.index = ['總數', '不一樣', '最多', '頻率'] # 重命名行名
df.columns # 查看全部列名
df.columns = ['班級', '姓名', '性別', '出生日期'] # 重命名列名
df.T # 轉置後的df, 非原地

'''查看數據'''
df.head(n) # 查看df前n條數據, 默認5條
df.tail(n) # 查看df後n條數據, 默認5條
df.shape() # 查看行數和列數
df.info() # 查看索引, 數據類型和內存信息

'''數據統計'''
df.describe() # 查看數據值列的彙總統計, 是DataFrame類型
df.count() # 返回每一列中的非空值的個數
df.sum() # 返回每一列的和, 沒法計算返回空, 下同
df.sum(numeric_only=True) # numeric_only=True表明只計算數字型元素, 下同
df.max() # 返回每一列的最大值
df.min() # 返回每一列的最小值
df.argmax() # 返回最大值所在的自動索引位置
df.argmin() # 返回最小值所在的自動索引位置
df.idxmax() # 返回最大值所在的自定義索引位置
df.idxmin() # 返回最小值所在的自定義索引位置
df.mean() # 返回每一列的均值
df.median() # 返回每一列的中位數
df.var() # 返回每一列的方差
df.std() # 返回每一列的標準差
df.isnull() # 檢查df中空值, NaN爲True, 不然False, 返回一個布爾數組
df.notnull() # 檢查df中空值, 非NaN爲True, 不然False, 返回一個布爾數組

7、轉換成 Numpy

df.values
np.array(df)

8、實戰應用

獲取交易對BTC/USDT最近10日的收盤標準差。數組

# 計算標準差
since_days = 10
test_symbol = 'BTC/USDT'

# 計算時間點
threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days=since_days))
SinceTimeStamp = int(time.mktime(threeDayAgo.timetuple())) * 1000  # 轉換爲時間戳,*1000,轉爲毫秒時間戳13位
tickers_list = binance_exchange.fetch_ohlcv(test_symbol, timeframe='1d', since=SinceTimeStamp)
# print(len(tickers_list))
# print(tickers_list)
kline_data = pd.DataFrame(tickers_list)
kline_data.columns = ['Datetime', 'Open', 'High', 'Low', 'Close', 'Vol']
print(kline_data)

print("describe:\n", kline_data.describe())
std = kline_data['Close'].std()
print("標準差:", std)

打印:數據結構

Datetime     Open     High      Low    Close           Vol
0  1590192000000  9170.00  9307.85  9070.00  9179.15  43526.296966
1  1590278400000  9179.01  9298.00  8700.00  8720.34  70379.866450
2  1590364800000  8718.14  8979.66  8642.72  8900.35  62833.910949
3  1590451200000  8900.35  9017.67  8700.00  8841.18  58299.770138
4  1590537600000  8841.00  9225.00  8811.73  9204.07  68910.355514
5  1590624000000  9204.07  9625.47  9110.00  9575.89  74110.787662
6  1590710400000  9575.87  9605.26  9330.00  9427.07  57374.362961
7  1590796800000  9426.60  9740.00  9331.23  9697.72  55665.272540
8  1590883200000  9697.72  9700.00  9381.41  9448.27  48333.786403
9  1590969600000  9448.27  9619.00  9421.67  9542.47  15797.593487

describe:
            Datetime         Open         High          Low        Close  \
count  1.000000e+01    10.000000    10.000000    10.000000    10.000000   
mean   1.590581e+12  9216.103000  9411.791000  9049.876000  9253.651000   
std    2.615890e+08   325.168891   282.355505   312.180668   339.899591   
min    1.590192e+12  8718.140000  8979.660000  8642.720000  8720.340000   
25%    1.590386e+12  8967.762500  9243.250000  8727.932500  8970.050000   
50%    1.590581e+12  9191.540000  9456.555000  9090.000000  9315.570000   
75%    1.590775e+12  9442.852500  9623.852500  9330.922500  9518.920000   
max    1.590970e+12  9697.720000  9740.000000  9421.670000  9697.720000   

                Vol  
count     10.000000  
mean   55523.200307  
std    16943.615232  
min    15797.593487  
25%    50166.657937  
50%    57837.066549  
75%    67391.244373  
max    74110.787662  


標準差: 339.8995912341039

相關文章:
Pandas DataFrame 總結
Python Pandas DataFrame 建立 (二十)
Python Pandas DataFrame 元素訪問 (二十一)app

相關文章
相關標籤/搜索