Pandas最常用的数据对象是数据框(DataFrame)和Series。数据框与R中的DataFrame格式类似,都是一个二维数组。Series则是一个一维数组,类似于列表。数据框是Pandas中最常用的数据组织方式和对象。
series是一种一维数据结构,每一个元素都带有一个索引,与一维数组的含义相似,其中索引可以为数字或字符串。series结构名称:
dataframe是一种二维数据结构,数据以表格形式(与excel类似)存储,有对应的行和列。dataframe结构名称:
1、pandas安装及模块导入
最常用的方法是通过Anaconda安装,在终端或命令符输入如下命令安装:
conda install pandas
若未安装Anaconda,使用Python自带的包管理工具pip来安装:
pip install pandas
模块导入:
import pandas as pd # 导入pandas库
print(pd.__version__) # 打印pandas版本信息
2、导入导出数据
#导入
pd.read_csv(filename):从CSV文件导入数据
pd.read_table(filename):从限定分隔符的文本文件导入数据
pd.read_excel(filename):从Excel文件导入数据
pd.read_sql(query, connection_object):从SQL表/库导入数据
pd.read_json(json_string):从JSON格式的字符串导入数据
pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据
#导出
df.to_csv(filename):导出数据到CSV文件
df.to_excel(filename):导出数据到Excel文件
df.to_sql(table_name, connection_object):导出数据到SQL表
df.to_json(filename):以Json格式导出数据到文本文件
3、查看数据信息
# df:任意的Pandas DataFrame对象
# s:任意的Pandas Series对象
df.head(n):查看DataFrame对象的前n行,默认5行
df.tail(n):查看DataFrame对象的最后n行
df.shape():查看行数和列数
df.dtype:查看数据框每一列的数据类型
df.index:查看索引
df.columns:查看列名
df.info():查看索引、数据类型和内存信息
df.describe():显示描述性统计数据,包括集中趋势、分散趋势、形状等
s.value_counts(dropna=False):查看Series对象的唯一值和计数
df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数
4、数据的选取和过滤
# df:任意的Pandas DataFrame对象
# s:任意的Pandas Series对象
#选取
df[col]:根据列名,并以Series的形式返回列
df[[col1, col2,...]]:以DataFrame形式返回多列
df.iloc[where]:按整数索引选取数据,选取单个行或行子集
df.iloc[:,where]:按整数索引选取数据,选取单个列或列子集
df.iloc[where_i,where_j]:按整数索引选取数据,同时选取行和列
df.loc[col]:通过轴标签选取数据,选取单个行货一组行
df.loc[:,col]:通过轴标签选取数据,选取单列或列子集
df.loc[col1,col2]:通过轴标签选取数据,同时选取行和列
#过滤
df[df['col3']==True]:单独列为基础选择符合条件的数据
df[df=='a']:以所有的列为基础选择符合条件的数据
df[(df['col2']=='a') & (df['col3']==True)]:多个筛选条件,且多个条件的逻辑为“且”,用&表示
df[(df['col2']=='a') | (df['col3']==True)]:多个筛选条件,且多个条件的逻辑为“或”,用|表示
df[df['col1'].isin([1,2])]:基于特定值的范围的数据查找
df.query('col2=="b"'):按照类似sql的规则筛选数据
5、数据的处理
# df:任意的Pandas DataFrame对象
# s:任意的Pandas Series对象
df.T:转置数据框,行和列转换
df.columns = ['a','b','c']:重命名列名
pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组
pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组
df.dropna():删除所有包含空值的行
df.dropna(axis=1):删除所有包含空值的列
df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
df.fillna(x):用x替换DataFrame对象中所有的空值
s.astype(float):将Series中的数据类型更改为float类型
s.replace(1,'one'):用‘one’代替所有等于1的值
s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3
df.rename(columns=lambda x: x + 1):批量更改列名
df.rename(columns={'old_name': 'new_ name'}):选择性更改列名
df.set_index('column_one'):更改索引列
df.rename(index=lambda x: x + 1):批量重命名索引
df.sort_values(['col1']):按值排序,默认为正序,可通过ascending=False指定倒序排序
df.sort_index(ascending=False):按索引排序,默认为正序,可通过ascending=False指定倒序排序
df.drop_duplicates(['col']):去重重复项,通过指定列设置去重的参照
6、数据的合并和匹配
df1.merge(df2,on='col1',how='inner')
df1.append(df2):将df2中的行添加到df1的尾部
pd.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
df1.join(df2,on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join
7、数据的分类汇总
# df:任意的Pandas DataFrame对象
# s:任意的Pandas Series对象
df.groupby(['col2'])['col1'].sum():按指定的列做分类汇总;groupby还可以配合agg,filter,transform,apply等高级函数使用
df['col3'].map(lambda x:x*2):将一个函数或匿名函数应用到Series或数据框的特定列
df.apply(pd.np.cumsum):将一个函数或匿名函数应用到Series或数据框
df.groupby(['col2']).agg({'col1':np.sum,'col3':np.mean}):一次性对多个列做聚合操作
pd.pivot_table(df,index=['col2']):以col2列为索引建立数据透视表,默认计算方式为求均值
df.count()非NaN的数量df.describe()一次性产生多个汇总统计
df.min():最小值
df.max():最大值
df.idxmax(axis=0, skipna=True):返回含有最大值的index的Series
df.idxmin(axis=0, skipna=True):返回含有最小值的index的Series
df.quantile(axis=0)计算样本的分位数
df.sum(axis=0, skipna=True, level=NaN)返回一个含有求和小计的Series
df.mean(axis=0, skipna=True, level=NaN)返回一个含有平均值的Series
df.median(axis=0, skipna=True, level=NaN)返回一个含有算术中位数的Series
df.var(axis=0, skipna=True, level=NaN)返回一个方差的Series
df.std(axis=0, skipna=True, level=NaN)返回一个标准差的Series
df.cumsum(axis=0, skipna=True, level=NaN)返回样本的累计和
df.cummin(axis=0, skipna=True, level=NaN)返回样本的累计最大值
df.cummax(axis=0, skipna=True, level=NaN)返回样本的累计最小值