一. Pandas数据结构的创建
1.1 Series对象
Series用于处理一维数据
#将集中了行标签的列表赋给index
s = pd.Series(np.random.rand(5),name='data',index=['A','B','C','D','E'])
#使用字典对象将数据传递给Series类,字典的键会成为行标签
s = pd.Series({'a':1,'b':2,'c':3},name='data')
s.index = ['d','e','f'] #修改行标签
s.shape #Series形状
s.values #Series值
s.dtype #Series数据类型
#括号内data类型可以是列表,一维numpy或者字典和标量
data = pd.Series(
data = [1,2,3,4,5]
,index=['a','b','c','d','e']
,dtype=int
)
1.2 DataFrame对象
DataFrame是由多个Series对象组合而成
#可以设置行标签(index)和列标签(columns)
df = pd.DataFrame(np.random.rand(3,4)
,index=['a','b','c']
,columns=['x','y','z','q'])
#也可以传递字典,键是列标签,值是列中数据
df = pd.DataFrame({
'X':[1,2,3,4]
,'Y':[1,3,5,7]
,'Z':[4,5,6,7]
}
,index=['a','b','c','d']
)
df.dtypes #可以访问各个列的数据类型 '
#可以用Series对象创建
#格式为 列名称:Series
二. Pandas读写csv
df = pd.read_csv(
'data1.csv'
,encoding='utf-8'
,delimiter=' '#分隔符
,header=1 #规定列名的行号
,names=['a','b','c','d'] #列名的名称
,dtype=int
)
df1 = pd.DataFrame(np.arange(12).reshape(3,4)
,index=['x','y','z']
,columns=['a','b','c','d'])
df1.to_csv('data3.csv')
三. DataFrame的性质
3.1 属性
df.values #返回numpy数组表示的数据
df.index #返回行索引
df.columns #返回列索引
df.shape #形状
df.size #大小
df.dtype #每列的数据类型
df.head()#显示前5行
df.tail()#显示后5行
df.smaple(5)#显示随机5行
df.info()#查看索引,数据类型和内存信息
df.describe()#查看数值型的列的汇总
df.axes#显示数据的行和列名
3.2 索引
#注意
#取出单独的列才可以使用[]
#取出单独的行用loc或者iloc
#默认的索引是0-n-1的数字
#可以给df以某一列设置索引
df.set_index('column_name',inplace=True)#inplace使得对原df的更改可以生效
df[column] #字典式
df[[c1,c2]]
df.coluums #属性式
df.loc[index] #获取行
df.loc[[index1,index2]]
df.iloc[0] #相对索引
df.iloc[[0,1]]
df.iloc[0,1] #获取值
3.3 切片
#行切片
df[index1:index2]
df.loc[index1:index2]
df.iloc[0:1]
#列切片
df.loc[:,c1:c2]
df.iloc[:,0:1]
#行列同时切片
df.loc[:,:]
df.iloc[:,:]
#切片和分散
#分散值放置于列表
#均分散
3.4 布尔索引
非常类似于sql语句,
条件判断会转为布尔值,以对df中的数据进行选择
df[df.column>90]
可以&并列关系也可以多重筛选
同nunpy
注意isin()函数
3.5 赋值
#增加列
df[new_column] = Series/nunpy
#可以修改index和columns
四. DataFrame的基本操作
4.1 数据查看
#查看前面的行
df.head(num) #默认5行
#查看后面的行
df.tail(num)
#查看总体信息
df.info()
4.2 Numpy通用函数同样适用pandas
4.2.1 向量化运算
分别对每个值进行操作
4.2.2 矩阵化运算
numpy会计算得更快
4.2.3 广播运算
同numpy
4.2.4 常见用法
pandas的操作会自动对齐索引
空的用Nan
import pandas as pd
#统计相关
df[column].value_counts()
#递增排序
df.sort_values(by=column)
#递减排序 ascending=False
df.sort_values(by=[column1,column2],ascending=[True,False])#column1升序,column2降序
df.sort_values(by=['Q1','Q2'],ascending=['True','False']) #两种排序依据
df.sort_index(axis) #0 行排 1 列排
#默认都是计算每一列的值
#axis=1 计算第二维度
df.count() #每一列中的非空值的个数
df.sum() #每一列数值的总和
df.min() #每一列的最小值
df.max() #每一列的最大值
df.mean() #每一列的均值
df.var() #方差
df.std() #标准差
df.median() #中位数
df.mode() #众数
df.corr() #列与列之间的相关系数
df.apply(method,axis=) #以method方法对每个元素进行处理
4.3 缺失值处理
df.isnull()
df.notnull()
df.dropna() #删除有缺失值的整行
df.dropna(axis='columns',how='all any') #删除有缺失值的整列
df.fillna(value=5) #缺失值填充为5
五. Pandas合并数据
pd.concat([df_1,df_2]) #垂直合并 默认axis=0
#axis=1 列合并
#ignore_index = True 解决索引重叠
pd.merge(df1,df_2,how='outer') #对齐的合并
六. 分组
分组之后必须用聚合函数,不然毫无意义
聚合函数例如:sum() mean()
df = pd.DataFrame({"key":["x", "x", "y", "z", "y", "z"],
"data1": range(6),
"data2": np.random.randint(0, 10, size=6)})
a = df.groupby("key")
#可以对a进行迭代
#a由元组构成,元组内两个元素,第一个分组的key类型,第二个Dataframe对象
#可以不同的列用不同的计算方法
df_1.groupby('team').agg({
'Q1':'sum'
,'Q2':'count'
,'Q3':'mean'
,'Q4':'max'
})
df_1.groupby('team').sum().stack() #以每一行为准,观察每一列的值的情况
df_1.groupby('team').sum().unstack() #以每一列为准,观察每一行的值的情况
七. 其它
7.1 eval()运算
#列间运算
pd.eval(列的运算表达式)
pf.query('列的判断式') #类似于表的查找
7.2 增加列
df[new_column]=values
7.3 输入与导出
#默认导出到同一目录
df_1.to_excel('')
df_1.to_csv('')