import pandas as pd import numpy as np
pandas基本功能
(1)数据文件读取/文本数据读取
(2)索引、选取和数据过滤
(3)算法运算和数据对齐
(4)函数的应用和映射
(5)重置索引
1、pandas:数据文件读取
通过pandas提供的read_xxx相关的函数可以读取文件中的数据,并形成DataFrame,常用的数据读取方法为:read_csv,主要可以读取文本类型的数据
# 读取csv文件:表格型的文本数据 df=pd.read_csv("text.csv",encoding='gbk') df
#读取text文件,sep指定分隔符,不读取头部数据 。默认使用逗号的形式分割 df1=pd.read_csv("text1.txt",encoding='gbk',sep=' ',header=None) df1
2、pandas:数据过滤获取
通过DataFrame的相关方式可以获取对应的列或者数据形成一个新的DataFrame, 方便后续进行统计计算。
# 数据过滤获取 columns=["age","name","历史","数学","语文"] dit={'name':['Dfg','Cfg','Cfg','Mel'], 'age':[12,13,14,15], '语文':[np.nan,99,97,90], '数学':[78,89,89,90], '历史':[90,98,97,96]} df2=pd.DataFrame(dit,index=['one','two','three','four']) df2
df3=df2[columns[2:4]] df3
df3=df2.dropna() df3
3、pandas:缺省值NaN处理方法
(1)dropna:根据标签的值中是否存在缺失数据对轴标签进行过滤(删除), 可以通过阈值的调节对缺失值的容忍度
(2)fillna:用指定值或者插值的方式填充缺失数据,比如: ffill或者bfill
(3)isnull:返回一个含有布尔值的对象,这些布尔值表示那些值是缺失值NA
(4)notnull:isnull的否定式
dit1={'name':['Dfg','Cfg','Zvb','Mel'], 'age':[12,np.nan,14,15], '语文':[np.nan,99,97,90], '数学':[78,89,np.nan,90], '历史':[90,98,97,np.nan]} df4=pd.DataFrame(dit1,index=['one','two','three','four']) df4
# 为NaN的值设置为True df4.isnull()
# 为NaN的值设置为Faulse df4.notnull()
# 默认删除包含缺失值的行 df4.dropna()
# 默认删除全部为缺失值的行 df4.dropna(how='all')
# 默认删除缺失值的列 df4.dropna(axis=1)
df4.dropna(axis=1,thresh=3)
df5=pd.DataFrame(np.random.randn(7,3)) df5.ix[:4,1]=np.nan df5.ix[3:4,2]=np.nan df5.ix[[1,2],0]=np.nan df5
df5.fillna(0)
df5.fillna({1:0.5,2:-1,0:1})
4、常用的数学统计方法
count:计算非NaN值的数量
describe:针对series和dataframe的各列计算总统计值
min/max:计算最大值和最小值
argmin/argmax:计算能够获取到最大值、最小值的索引值(整数)
quantile:计算样本的分位数0-1
sum:值得和
mean:值得平均值
median:值中位数
mad:根据平均值计算平均绝对距离差
var:样本数值的方差
std:样本数值的标准差
cumsum:样本值的累积和
cummin/summax:样本的累积最大值、最小值
cumprod:样本值的累计积
pct_change:计算百分数的变化
df3=df2.dropna() print("========================================") print(df3) print("========================================") print(df3.describe()) print("========================================") print(df3.var()) print("========================================") print(df3.sum()) print("========================================") print(df3.cumsum()) print("========================================") # print(df3.cumprod())
5、pandas:相关系数与协方差
dit={'age':[12,13,14,15], '语文':[np.nan,99,97,90], '数学':[78,89,89,90], '历史':[90,98,97,96]} df7=pd.DataFrame(dit,index=['one','two','three','four']) df7
# 相关系数 df7.corr()
# 协方差 df7.cov()
6、pandas:唯一值、值计数以及成员资格
(1)unique方法用于获取Series中的唯一值数组(去重数据后的数组)
(2)value_counts方法用于计算一个Series中各值的出现频率
(3)isin方法用于判断矢量化集合的成员资格,可用于选取Series中或者DataFrame中列中数据的子集
# df7.unique()错误使用方法,对于dataframe必须要指定是哪一列,对于series可以直接使用unique df7["数学"].unique() array([78, 89, 90], dtype=int64)
# df7.value_counts()错误使用方法,对于dataframe必须要指定是哪一列,对于series可以直接使用value_counts # df7.value_counts() df7["数学"].value_counts()
mask=[89,90] print(df7.isin(mask)) print("========================================") print(df7[df7.isin(mask)])
7、pandas:层次索引
(1)在某一个方向拥有多个(两个及两个以上)索引级别
(2)通过层次化索引,pandas能够以较低维度形式处理高纬度的数据
(3)通过层次化索引,可以按照层次统计数据
(4)层次索引包括Series层次索引和DataFrame层次索引
# series的层次索引 data=pd.Series([989.44,987,934,9245,7824], index=[ ['2001','2001','2001','2002','2002'], ["苹果","香蕉","西瓜","苹果","西瓜"] ]) data
# 第一层索引 data['2001']
# 第二层索引 # 通过data['2001']获取的数据还是series类型,所以可以使用索引或者下标的方式获取响应的值 data['2001']['苹果':'香蕉'] # data['2001'][0:1]
data['2001':'2002']
# dataframe的层次索引 dic={"year":[2001,2001,2002,2002,2003], "fruit":['apple','banana','apple','banana','apple'], "prodution":[123,144,5556,768,7977], "profite":[567,876,978,243,123]} dfa=pd.DataFrame(dic) dfa
# 将year作为一级索引,将fruit作为二级索引 dfa.set_index=["year","fruit"] dfa
# 获取一列 dfa['prodution']
dfa.ix[2001]
dfa.ix[2001,'apple']
dfa.ix[2001:2002]
dfa.ix[2001:2002]["prodution"]
# 按照层次索引进行统计数据 # dfa.sum(level='year') dfa.sum(level='fruit')
dfa.min(level=['year','fruit'])