pandas 常用功能
官网地址
pandas 由三部分组成Series(一维),DataFrame(二维),Panel(三维以上数组)
import pandas as pd
import numpy as np
# 新建 里面可以是列表也可以是字典
pd.Series([1,3,5,7,None],index=list('abcde'))
pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':[3,4,5]})
# 增加一列的话的方法和使用字典一样 a['s'] = 1
# 字典情况下 键是作为列名存在
pd.date_range('2000.1.1', periods=5) # 自动向后延时5天
pd.DataFrame([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
], index=list('abc'), columns=list('ABC'))
# 指定行索引 指定列索引
a[a.Sex.isin(['male'])] # a数据中,Sex中是mela的索引出来
# 其他读取文件方式类似
print(a.head()) # 前5行可以指定
print(a.tail()) # 最后5行可以指定
print(a.describe()) # 描数信息
print(a.index) # 下标相关信息
print(a.columns) # 列名
print(a.values) # 获取到值
print(a.sort_index(ascending=False)) # 下标排序 可以指定降序 level=0或者1可以用下标排序
print(a.sort_values('DATE', ascending=False)) # 值排序
print(a.info()) # 获取数据基本信息
print(a.shape) # 获取行和列的大小值
print(a.count()) # 非Na值的数量
print(a.ndim) # 列数
print(a.size) # 获取元素个数
print(a.ravel()) # 拉平数组
print(a.duplicated()) # 判断是否重复
# 删除
a.drop() # 删除
a.drop_duplicates() # 删除重复的值 第一个参数为可选参数[]
# 层次化结构相关
a.reset_index() # 转换为DataFrame对象 可以去除索引
a.set_index() # 把某一列变成索引 加上drop=False属性可以保留数据不被删除
a.swaplevel(0,1,axis=1) # 第一行索引和第二行的索引交换 默认为列
a.swapaxes(0,1) # 类似于 a.T
# 替换相关
a.replace('需要替换的值','要替换的值') # 可以为列表
a.reindex(a, b) # 替换
# 在某个范围之间
pd.cut('拆分谁', '拆分多少份') # 得到数据属于哪一个范围
ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
s = pd.cut(ages,[18,25,35,60,100])
s.value_counts()
a.map(b) # 映射 a应该是个Serier对象 b需要的是一个字典
# map 实例
a = pd.Series(['张','三','丰','李','四','赵','六'])
b = {'张': 124,'三':142,'丰':531,'李':743,'四':351,'赵':1351,'六':42}
a.map(b)
0 124
1 142
2 531
3 743
4 351
5 1351
6 42
dtype: int64
# 索引
a.iloc[0,0] # 索引位置 (行,列)
a.loc['a', 'A'] # 索引标签 (行标签,列标签)
a.loc['条件','列'] = '值' # loc条件索引
a.iat[0,0] # 索引位置 只能索引一个(行,列)
# 空值处理
pd.isna(a) # 判断是否是空值
a.dropna() # 删除行中带有NaN的空值 需重新赋值
a.fillna(0) # 替换所有的空值为0 需要重新赋值
# 日期
pd.to_datetime('日期列')
# 拼接 连接 级联 # 重名列保存指定suffixes=('_左','_右')属性
A.merge(B,left_on='key',right_index=True)
# 连接时可以指定left_index=True,right_index=True属性,把索引作为值对待
pd.concat([a,b], 1, sort=True, # 类似于numpy中的vstack,hstack 默认按列 1是行
ignore_index=True) # 继续编号
A.merge(B,how='left',on='id') # 左连接 只取左边有的数据以及和右边相同的数据补左
A.merge(B,how='outer',on='id') # 外连接 全部数据
A.merge(B,on='id') # 默认内连接 只取两边都有的
A.merge(B,left_on='e',right_on='k',how='outer') # 不同列名连接
A.stack() # 列变行
A.unstack() # 行变列
A.combine_first(B) # 打补丁,用B中的值填充A的缺省值,多余的值移交A
# 数据向下移 原数据用空值代替
a.shift() # 默认移动1个单位可以指定
# 每一个 数向前一个比较 得出增加比例
a.pct_change() # 如2比3计算3-2/2结果为0.5
(a > 0).all() # 按列计算a里面全部比0大的为True
(a > 0).any().any # 每一列有一个成立,结果为True
a.apply(fun) # 可以调用函数
a.value_counts() # 可以统计每个单位出现的次数 (只能用于Series)
# DataFrame 可以这样用 a.a.value_count() 或者 a['a'].value_count()
a.str.contains('q') # 调用str方法 可以是str的任何方法
# 这里是判断里面是否存在q
# 分组
stu = pd.DataFrame({
'name': ['张三', '李四', '王五', '小六'],
'sex': ['N', 'N', 'N', 'V'],
'age': [12, 25, 24, 22],
'job': ['H5', 'BD', 'AI', 'AI']
})
stu.groupby('sex').groups # 显示分组后的结果
stu.groupby('sex').get_group('N') # 显示分组后的N详细信息
stu.groupby('sex').agg(np.mean) # 分组后调用函数 可以自定义函数
stu.groupby('job').agg([np.mean,np.max,np.min]) # 分组后计算平均年龄,最大年龄,最小年龄
stu.groupby(['job', 'sex']).count() # 可以进行多列分组 并统计个数
stu.groupby('age').filter(lambda x: x['age'] >25) # 过滤年龄
""" age
mean amax amin
job
AI 23 24 22
BD 25 25 25
H5 12 12 12"""
a['a'].astype('category') # 重复的忽略,只查看一个
# 数据透视表
# 参数:data数据, values=统计列名, index=分组列名, columns=指定列, aggfunc='mean'函数列表
a = pd.read_csv('UNRATE.csv')
pd.pivot_table(a, index=['DATE'], values=['VALUE'], aggfunc=[np.sum])
a.pivot_table(['VALUE'], ['DATA'], aggfunc=[np.max]) # 也可以这样
# 汇总
a.sum() # 合计 axis同numpy level=0 指定某一个索引求和
a.std() # 标准差
a.var() # 方差
a.cumsum() # 累计
a.mix() # 最小值
a.max() # 最大值
a.mean() # 平均值
a.median() # 中位数
a.cov() # 协方差
a.idxmin() # 索引最小值 获取坐标
a.idxmin() # 索引最大值
# eq(相等), ne(不相等), lt(小于), gt(大于), le(小于或等于)
读写文件
# 读取csv文件 支持更多操作
a = pd.read_csv('UNRATE.csv') # 读取数据 任何url
# 参数 header=None 去掉标题,skiprows=[0,2]指定行读取(=1可以跳过第一行), sep='分隔符', nrows=5只显示5行
# names=['标题'] 列名, index_col=['列名变索引'], na_values=['空值补充']
# chunksize=2 # 块大小,设置了此属性会返回一个可迭代对象,可以用next()读取
pd.read_html('网址') # 读取该网址里面的table表格,返回列表
pd.read_json('json格式数据')
pd.read_excel('文件名','表名')
# 5、HDF5数据
df=pd.HDFStore("test.h5") #创建
df['ff']=pd.DataFrame([
[1,2,3,4,5],
[6,7,8,9,10]
])#写入数据,hdf中的数据是一个键值对形式
df['ff'] 读取数据
# 6、sqlite操作:
import sqlite3 #导入
conn=sqlite3.connect("student2")#新建连接
x=conn.execute("select * from student ")#执行操作
x.fetchall()#获取所有数据
conn.close()关闭连接
# 写csv文件
a.to_csv('123.csv',sep='分隔符', columns=['要保存的列名'],
header=False('标题'),index=False('下标')) # 保存数据
pd.options.display.max_rows=20 # 设置显示20个数据前10+后10
sys.stdout # 系统输出