简介
pandas是基于numpy的库,一维数据用Series,二维数据用DataFrame,以下所有例子都基于
from pandas import DataFrame, Series
import pandas as pd
#基本操作
一维初始化及按行索引
a=Series([1,2,3])#默认索引从0开始
b=Series([1,2,3],index=['a','b','c'])#可设置索引
c=Series({'a':1,'b':2,'c':3})#可结合字典
# print(c.keys())
# print(c.index)
#修改索引
c.index=['d','e','f']#修改索引
print(c)
#按行索引,无按列索引
# print(c['d'])
# print(c[0])
# print(c[0:2])
# print(c[[0,2]])
d 1
e 2
f 3
dtype: int64
二维初始化及按行按列索引
a={'fea1':[1,2,3],'fea2':[4,5,6],'fea3':[7,8,9]}
df=DataFrame(a)#用字典初始化
df.columns.name='FEA'#设置列名
df.index.name='INDEX'#设置索引名
print(df)
# print(df.columns)#Index(['fea1', 'fea2', 'fea3'], dtype='object', name='FEA')
#按行索引
# print(df[0:2])
# print(df.ix[1])
# print(df.ix[0:1])
# print(df.ix[[1,2]])
#按列索引
# print(df[['fea1','fea3']])
# print(df[df.columns[:2]])
#按照列重排
# df.columns=['fea3','fea1','fea2']
# print(df)
#查找某行某列的数据
# .loc .iloc .ix
#查找某个元素
# .get_value .at .iat
#打印所有信息
# print(df.info)
FEA fea1 fea2 fea3
INDEX
0 1 4 7
1 2 5 8
2 3 6 9
.info方法输出显示的叫概要视图
一维转换类型
.to_string() .to_dict() .tolist() .to_json() .to_frame() .to_csv()
二维转换类型
.to_json() .tolatex() .to_excel()
利用条件查找数据
query也可以用来排除一些异常数据
a={'fea1':[1,2,3],'fea2':[4,5,6],'fea3':[7,8,9]}
df=DataFrame(a)#用字典初始化
print(df)
# #单个条件
# print(df[df['fea2']>5])
# #多个条件
# print(df[(df['fea2']>4) & (df['fea3']<9)])#注意这里多个条件要()
# print(df.query('fea2>4 and fea3<9'))#注意引号的位置
# canshu=9
# print(df.query('fea2>4 and fea3<@canshu'))#注意引用外部参数时要使用@
计算
.sum .mean .max .min
描述
.shape 大小
.dtype 数据类型
.info 多种信息(包含数据量、特征、数据类型)
.describe 统计量信息
.value_counts 统计各个值出现的次数
a={'fea1':[1,2,3],'fea2':[4,5,6],'fea3':[7,8,9]}
df=DataFrame(a)#用字典初始化
print(df.describe())
print(df['fea2'].value_counts())
fea1 fea2 fea3
count 3.0 3.0 3.0
mean 2.0 5.0 8.0
std 1.0 1.0 1.0
min 1.0 4.0 7.0
25% 1.5 4.5 7.5
50% 2.0 5.0 8.0
75% 2.5 5.5 8.5
max 3.0 6.0 9.0
预览
.head()#头5行
.tail()#后5行
.sample(5)#随机5行
统一操作
Series:.map
Dataframe:.apply .applymap
#数据清洗
补充缺失值
a=DataFrame({'col1':[1,2,3,None,5],'col2':[2,3,None,3,4]})
print(a)
# print(a.fillna('missing_value'))#将缺失值作为一个特殊的值
# print(a.fillna(a.mean()))#补均值
#补附近的值
# print(a.fillna(method='bfill'))#back fill 即用后一个值填充
# print(a.fillna(method='ffill',limit=1))#补前一个值,limit=1表示连续的缺失只补1个
#插值补值
# print(a.interpolate(method='polynomial',order=2))#二次多项式插值
# print(a.interpolate(method='spline',order=3))#三次样条插值
去除有缺失值的行
a=DataFrame({'col1':[1,2,3,None,5,None],'col2':[2,3,None,3,4,None]})
print(a)
#删掉有0的行
print(a.dropna())
#删掉全0的行
# print(a.dropna(how='all',axis=0))#这里有点反常识,0表示行,1表示列
去重去列特征
a=DataFrame({'col1':[1,2,3,None,5,None,1],'col2':[2,3,None,3,4,None,2]})
print(a)
print(a.drop_duplicates())#去重
print(a.drop('col2',axis=1))#去列特征
#用于文件存取
csv文件
a=DataFrame({'col1':[1,2,3,None,5,None,1],'col2':[2,3,None,3,4,None,2]})
#csv文件的生成
# a.to_csv('cshi.csv',index=None,mode='a',header=True)#a表示追加模式,header=False表示不再写入列名
#csv文件的读取
b=pd.read_csv('cshi.csv')
print(b)
excel文件
与xls文件一样,如果不和pandas结合,一个xlsx文件的生成分为【建表-增加sheet-写入-保存关闭】四步,这里讨论与pandas库结合的方法,分为【建立writer-增加sheet内容-保存关闭】三步。除了xlsxwriter外,另一个可以对xlsx文件进行更精细操作的库为openpyxl。
a=DataFrame({'col1':[1,2,3,None,5,None,1],'col2':[2,3,None,3,4,None,2]})
#xlsx文件的生成
# writer=pd.ExcelWriter('ceshi.xlsx',engine='xlsxwriter')
# a.to_excel(writer,sheet_name='ces')
# writer.save()
#xlsx文件的读取
b=pd.read_excel('ceshi.xlsx',sheet_name='ces')
print(b)