Pandas 是一个非常好用的库,总结一下 Pandas DataFrame 常见用法,在使用的时候可以快速找到。

Pandas DataFrames 是具有带标签的行和列的二维数据结构,可以存储很多类型的数据。如果你熟悉 Excel 的话,可以将 Pandas DataFrames 看做类似于电子表格。

一、引入

import numpy as npimport pandas as pd

二、创建

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)

三、排序

按列、行名排序

# 行名排序 降序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'])

四、索引

位置索引

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(['张三','李四'])] 

五、插入与删除

# 假设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) 

六、DataFrame 重要方法与属性

'''重要属性'''df.values # 查看所有元素的valuedf.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, 返回一个布尔数组

七、转换成 Numpy

df.valuesnp.array(df)

八、实战应用

获取交易对BTC/USDT最近10日的收盘标准差。

# 计算标准差since_days = 10test_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           Vol0  1590192000000  9170.00  9307.85  9070.00  9179.15  43526.2969661  1590278400000  9179.01  9298.00  8700.00  8720.34  70379.8664502  1590364800000  8718.14  8979.66  8642.72  8900.35  62833.9109493  1590451200000  8900.35  9017.67  8700.00  8841.18  58299.7701384  1590537600000  8841.00  9225.00  8811.73  9204.07  68910.3555145  1590624000000  9204.07  9625.47  9110.00  9575.89  74110.7876626  1590710400000  9575.87  9605.26  9330.00  9427.07  57374.3629617  1590796800000  9426.60  9740.00  9331.23  9697.72  55665.2725408  1590883200000  9697.72  9700.00  9381.41  9448.27  48333.7864039  1590969600000  9448.27  9619.00  9421.67  9542.47  15797.593487describe:            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 元素访问 (二十一)