Pandas 基本用法
是基于Numpy创建的
这里写目录标题
1.安装&创建df
Pip3 install pandas
①使用Series ,DataFrame(一维数组,二维数组)
from pandas import Series ,DataFrame
from pandas as pd
*本文以 data 作为数据来使用
pd.date_range(“20080301”,periods= 6) #从20080301 开始产生6个日期
#在Series 和DataFrame 参数中还可以设置index 和columns(写成列表) DataFrame中的数据形式有多种 ,字典.......
常见用法
data.shape #查看数据有几行几列
data.info() #查看数据信息
data.dtypes #查看每列数据的类型
.index #查看所有行号
.columns # 查看所有列号
.values #查看所有值
.apply(类型) #改变数据类型
#( 改变某列数据类型 data[“列名”].astype( int ) )
.describe( ) # 查看data中的
count 计数
mean 平均值
std 标准差 等等
data.T #二维表反转 (index 和 columns交换)
data.sort_index(axis = 1,ascending =False)
#axis = 0或1 0为行排序 1为列排序
# ascending = true 或false true为正序 (小到大)
data.head(5) #只显示前五行数据
data.tail(5) #只显示后五行数据
#设置显示配置
pd.set_option( “display.max_columns”,10) 显示10行10列
pd.set_option( “display.max_rows”,10)
data.set_index(“某列名”) # 把某列名设置为index 也可以用列表设置成多个index
.reset_index(level = 0,drop =true ) #恢复...
#Level = 0 表示最外层索引
.sort_values( by =”E”) #按照 列标E 的值排序
data[“A”] 或data.A #输出A整列的数据
data[ 0:3 ] 切片 行
data[‘20080301’:’20080305’] 筛选
2.数据导入 ,导出 read_XX
有多种格式
Csv excel json html pickle hdf5…
读取数据时 常见参数
1、index_col =0 #第0列作为索引(作为index)
2、header =None #去掉columns (变为数字标)
3、names = 列标的列表 #设置列的名字
4、dtype = {‘Goals’:np.float64} #把Goals列设为float型
5、usecols =[列表] #只读取列表中有的列名的数据
6、sep = “xx” #以 xx 作为数据的分隔符
7、skiprows = [0,1] #跳过第 0,1行的数据
8、sKip_footer =1 # 跳过倒数一行的数据
9、engine =’python’ #和 8一起使用
10、nrows =5 # 只读出五行数据
11、Parse_date= true #自动判定时间序列
read_excel中 文件可能有多个表 可用参数 sheetname = ‘某表名称’
to_excel( ) 中,参数index = False 可以不把index 标签写到文件中
参数 sheet_name= ‘xxx’ 可以设置表名 excel文件后缀为 .xlsx
②Execl文件追加写入
from pandas import ExcelWriter
with ExcelWriter(“路径”) as w:
data.to_excel(w,sheet_name = “表1”)
data.to_excel(w,sheet_name = “表2”)
③数据库的读取,写入
读
data = pd.io.sql.read_sql( a , b, c )
a 查询语句
b connection 连接数据库
C index_col = “index”
写
data.to_sql(“数据表名”,connection, if_exits =”replace”)
#参数 if_exits =”replace” #若已有该表则替换
④hdf5读取 (后缀为 .h5)
hdf = pd.HDFStore(‘路径’)
hdf是一个对象,类似字典
hdf[“df”] =data
3.根据 loc 进行数据精确选择
data.loc[ ‘20060301’,[“A”,”B”] ] #标签名
data.iloc[ 3,1] Data.iloc[ 3:5,1:3]
data.iloc[ [1,2,3],[5,6,7]] # 行/列号
#以上两种混合
data.ix[ ]
#根据判断 筛选数据
data[data.A>0]
#数据设置
#根据上面的 iloc 和loc 设置数据
data.iloc[ 2,2] =67
data[data.A>0] =12
data[“A”] =np.nan #根据行列设置
4.添加数据
#1.增加一列数据
data[“新列号”]=pd.Series([1,2,3,4,5,6,7] , index=date_range(“20080301”,periods= 6))
#2.删除数据
data.drop( 0,inplace =True) #删除第0行数据
Inplace = True 否则返回一个新data
5.处理丢失数据、填缺失值、重复值处理
处理一些数据中的NaN数据
①使用dropna( ) 去掉Nan的行或列
data.dropna( axis =0, how = “any”)
#axis =0 对行操作 how=”any”或”all”
#any 只要有NaN即去掉 all 全都是NaN才去掉
#参数 thresh= 5 Nan超过5个才去掉
②替换 、填充 数据
Data.fillna(values =0) #nan值全部替换为0
#参数 method =’ffill’或’bfill’
#ffill:用前一个值填充 bfill 用后一个值填充
③ isnull( ) #判断数据是否丢失
Pd.isnull( data) #NaN 为True
np.any( data.isnull( ) )
④
data.interpolate( ) # 插值,即NaN填充为上一个和下一个值得平均值,可用参数method=“time”基于时间序列填充,参数method =“values”基于index 填充
⑤ 重复行处理
data.duplicated( ) #判断是否有重复行
data.drop_duplicates( [ “A”,”B”] ) #去掉重复行
#参数可以是一个列表 该列表为一些列标,列表里为哪些列作为判断重复的标准
#若使用另一个参数keep =”last” 则保留重复行后面的那行
6.数据转换、重构
1、transform (也是数据清洗的一种方法)
①映射 x.map( y)
x
one | 1 |
two | 2 |
three | 3 |
y
1 | a |
2 | b |
3 | c |
结果
One a
Two b
Three c
② 替换
data.replace( 1,5) #把data中的1都替换为5 (只替换一个值)
'''
也可以这样
data.replace( [ 1,2,3 ] , [4,5,6] )
把data中的1,2,3,替换为4,5,6
还可以用字典格式
data.replace( {1:6 , 3:10 } )
把值1替换为6 3替换为10
还可以
data.replace( {“A”:1,“B”:2},100)
把A列中的1,B列中的2 替换为100 ''''
③ apply( ) 函数
data
a b c
0| 0 1 2
1| 3 4 5
2| 6 7 8
3| 9 10 11
-----------------------
data.apply( lambda col: col.sum() )
结果
a 18
b 22
c 26
data.apply( lambda row: row.sum(),axis =1 )
结果
0 3
1 12
2 21
3 30
更常用apply添加一个列
#这个例子是添加列 “new” 为a和b的和 还是上面的data
data[“new”] = Data.apply(lambda r: r.a*r.b ,axis= 1)
结果
data
a b c new
0| 0 1 2 0
1| 3 4 5 12
2| 6 7 8 42
3| 9 10 11 90
2、 outlier 异常值的处理 (忘记了)
mask =np.abs( data.data-data.data.mean() ) >= ( 2*data.Data.std() )
#mask 为标准差之外的异常值
data[mask ] =data.data.mean() #用均值填充异常值
7.重构 转换表或向量的结构
from collections import orderedDict 可以生成一个有序字典
1.pivot()
2.pivot_table()
3. stack()
4. un_stack( )
函数pivot( )中的三个参数 index , columns , values
data.pivot( index=’列名A’ , columns=’列名B’ , values=’列名C’)
(有点类似groupby( ) )意思是把一个data A列设index…
A B C D
0| x a 1
1| x b 2
2| y a 4
3| y c 5
结果
B | a | b | c |
---|---|---|---|
A | |||
x | 1 | 2 | NaN |
y | 4 | NaN | 5 |
values 缺省条件下会把其余列标都当做values (即多列pivot)
常见错误 index/columns 索引后对应有多行相同值
此时就要使用pivot_table( ) 它会对相同检索的值求(默认)平均值,还可以通过参数 aggfunc = np.max/mean/mix …改变这个默认 参数fill_value = 0 填充NaN
参数 Margins =true 显示汇总,合计
Pivot() 实际上是对向量 进行stack的特例
Stack 是把最内层的 列 索引变成最内层的 行 索引
Unstack 是把最内层的 行 索引变成最内层的 列 索
8.数据合并 concat ,merge ,join
res = pd.concat( [data1 ,data2 , data3] ,
axis =0,ignore_index =True)
#axis = 0 /1
# 0 行合并 1 列合并
#ignore_index =True是否重置index
res = pd.merge( data_left,data_right,on =”key”)
#参数on 为合并数据时用的是哪些列标,也可以多个
res = pd.merge( data_left,data_right,
on =[”key1”,”key2”] , how = “inner”)
how 的四种参数,默认为 inner
1.Inner 交集,保留两表公共key部分
2.outer 并集,保留两表所有key部分
3.left 只保留左表key里有的行数据
4.right 只保留右表key里有的行数据
参数indicato = True/False/”xxx”,作用是输出每项合并方式( 会在结果的最左边多一个_merge列,里面有提示 left_only , right_only ,both) ”xxx”为设置这个列名
#此为根据 列 合并 ,也可以根据 行 合并, 用参数left_index = True, right_index =True
join()与merge()差不多 但使用的是index label
#Pandas 中的 groupby
groupby 与MapReduce 相似 使用 groupby返回一个对象,
对象.groups查看对象内容
还可以 .size() 统计每组的大小等等
groupby() 的参数
① 列名,
② 列名的列表(多重分组), 还可用lambda函数
参数 level = 0 #按第一级行标 #这部分还有疑问
= [ ] 里面为行标名
数值为1的在第11行,数值为2的在第8,9,15 行
aggregate( )聚集函数
参数为一个函数
pd.cut( )
9.Pandas中的绘图功能
Pandas 中也有绘图功能 可以由plot()函数完成 默认为折线图
Data.plot(grid = False ,)
参数 ① grid = True /False 是否显示背景网格线,默认False
参数② subplot = True /False 是否将每列的数据独立绘制一个图 默认False
参数③ secondary_y =”某列名” 设置第二坐标(右边的Y坐标)
参数 kind density密度曲线
参数 stacked =true /false #是否为堆叠
参数color =[] #设置颜色