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 元素访问 (二十一)