Pandas函数方法教程
简介 :andas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
Pandas 和 Series 的 describe() 方法
describe()函数用于生成描述性统计信息。 描述性统计数据:数值类型的包括均值,标准差,最大值,最小值,分位数等;类别的包括个数,类别的数目,最高数量的类别及出现次数等;输出将根据提供的内容而有所不同。
函数官网
详解
信息打印 info()
info()函数用于打印DataFrame的简要摘要,显示有关DataFrame的信息,包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况。
函数官网
详解
查看前部数据 head()
默认查看前五行数据
tb.head(n) # 查看表tb的前n行
排序函数sort_values()
函数原理类似于SQL中的order by,可以将数据集依照某个字段中的数据进行排序,该函数即可根据指定列数据也可根据指定行的数据排序。
举例:
查看、删除重复行
#查看重复的行有哪一些
df.duplicated()
#删除重复的行
df.drop_duplicates()
去重函数drop_duplicates()
- 去除完全重复的行数据
data.drop_duplicates(inplace=True)
- 去除某几列重复的行数据
data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)
subset: 列名,可选,默认为None
keep: {‘first’, ‘last’, False}, 默认值 ‘first’
- first: 保留第一次出现的重复行,删除后面的重复行。
- last: 删除重复项,除了最后一次出现。
- False: 删除所有重复项。
inplace:布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。(inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。)
错误写法:
data=data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)
inplace=True就会在原数据上进行修改了,不需要’data=’。上面代码会将data变成NoneType。
此函数说明参考博客:https://blog.csdn.net/dzysunshine/article/details/100022994
设置索引set_index( )
DataFrame可以通过set_index方法,可以设置单索引和复合索引。
DataFrame.set_index(keys, drop=True, append=False, inplace=False,verify_integrity=False)
- 第一个参数是要作为索引的列名,可以设置多个(以列表形式)
DataFrame.set_index(["name", "Id"], inplace=True)
- 第二个参数是inplace,决定是否创建副本:为False则创建副本;为True则在原数据集修改
- 参数drop–是否删除作为索引的列,默认True;
append–是否将新的列添加到索引中且不替换已有索引,默认False
append添加新索引,drop为False,inplace为True时,索引将会还原为列
列转行unstack()
stack函数会将数据从”表格结构“变成”花括号结构“,即将其行索引变成列索引,反之,unstack函数将数据从”花括号结构“变成”表格结构“,即要将其中一层的列索引变成行索引。–来自博客:https://www.cnblogs.com/bambipai/p/7658311.html
DataFrame的创建有多种方式,不过最重要的还是根据dict进行创建,以及读取csv或者txt文件来创建。
pandas中的Series对象有一个方法叫做unstack,调用一个具有二级索引的Series对象的unstack方法,会得到一个DataFrame对象。其索引就是Series对象的一级索引,列就是Series对象的二级索引。–*--来自博客https://www.cnblogs.com/traditional/p/11967360.html
分组groupby()
pandas提供了一个灵活高效的groupby功能,它使你能一种自然地方式对数据集进行切片,切换,摘要等操作。
根据一个或者多个键(可以是函数可以是数组或者DataFrame列名)拆分pandas对象。计算分组摘要统计,
如计数、平均数、标准差、或者用户自定义的函数
PS:describe()描述组内数据的基本统计量,unstack()索引重排-----使结果更便于对比查看
groupby()能做什么?
- df.groupby(col),返回一个按列进行分组的groupby对象;
- df.groupby([col1,col2]),返回一个按多列进行分组的groupby对象;
- df.groupby(col1)[col2]或者df[col2].groupby(col1),两者含义相同,返回按列col1进行分组后,col2的值;
常用功能:
- 用 first(),tail() 截取每组前后几个数据,默认5
- 用 filter() 对分组进行过滤,保留满足()条件的分组
- 用 apply() 对每组进行(自定义)函数运算 DataFrame的很多函数可以直接运用到Groupby对象上:
agg()实现分组多个运算sql df.groupby( ["班级","性别"]).agg([np.sum, np.mean, np.std]) # 一次计算了三个
参考自:https://www.cnblogs.com/Yanjy-OnlyOne/p/11217802.html
分组之后统计一列的不同值 nunique()
需求:loan_type有多个取值,分别记数不同取值下有多少个不重复的report_id
即先按loan_type分组,然后统计report_id列里没有重复值的数据
model_df.groupby("loan_type").nunique()['report_id']
transform()
将刚刚分析出的数据与原始数据加工到一起,因为新旧数据的长度是不一样的。
设置标签前缀add_prefix()
DataFrame.add_prefix(prefix)
带有字符串前缀的前缀标签。
对于Series,行标签是前缀的。对于DataFrame,列标签是前缀的。
设置后缀标签 add_suffix()
DataFrame.add_suffix(suffix)
带有字符串后缀的后缀标签。
对于Series,行标签加后缀。对于DataFrame,列标签加后缀。
判断空:isna()
场景:
dataframe的某一列id有很多空值,要筛选出不为空的数据:
df = dataframe[dataframe['report_id'].isna() == False]
类似函数isnull(),还有个isnan()
总结一下:
- numpy里边查找NaN值的话,就用np.isnan()。
- pandas里边查找NaN值的话,要么.isna(),要么.isnull()
关于数据表合并
python数据表的合并(python pandas join() 、merge()和concat()的用法)
合并dataframe merge()
用数据库样式的联接合并DataFrame或命名的Series对象。
联接在列或索引上完成。如果在列上连接列,则DataFrame索引将被忽略。否则,如果在索引上连接索引或在一个或多个列上建立索引,则将传递索引。
DataFrame.merge(self, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
join()
在索引或键列上与其他DataFrame连接列。通过传递列表,有效地通过索引连接多个DataFrame对象.
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
连接函数 CONCAT ()
https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc
CONCAT_WS()
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。
删除某列
通过pandas删除列:
1.del df[‘columns’] #改变原始数据
2.df.drop(‘columns’,axis=1)#删除不改表原始数据,可以通过重新赋值的方式赋值该数据
3.df.drop(‘columns’,axis=1,inplace=‘True’) #改变原始数据
df.drop(columns=["handsome","smart"])#删除列名为handsome和smart的整列
tolist()
作用:将数组(array),矩阵(matrix)转化为列表
import pandas as pd
df = pd.DataFrame({'a':[1,3,5,7,4,5,6,4,7,8,9],
'b':[3,5,6,2,4,6,7,8,7,8,9]})
df['a'].values.tolist()
#[1, 3, 5, 7, 4, 5, 6, 4, 7, 8, 9]
#or you can just use
df['a'].tolist()
#[1, 3, 5, 7, 4, 5, 6, 4, 7, 8, 9]
#To drop duplicates you can do one of the following:
df['a'].drop_duplicates().values.tolist()
#[1, 3, 5, 7, 4, 6, 8, 9]
list(set(df['a'])) # as pointed out by EdChum
#[1, 3, 4, 5, 6, 7, 8, 9]
#convert df to list[list]
df.values.tolist()
#conver series to list
Series.tolist()
numpy的例子:
dataframe对行列求和并添加行或列
计算各行数据总和并作为新列添加到末尾
df['Col_sum'] = df.apply(lambda x: x.sum(), axis=1)
计算各列数据总和并作为新行添加到末尾
df.loc['Row_sum'] = df.apply(lambda x: x.sum())
** 详细代码及例子说明 **
指定列求和
code_table_data['权重'] = code_table_data.iloc[:,3:6].sum(axis=1)
解释:
code_table_data[‘权重’] 为该数据设置新的一列
code_table_data.iloc[:,3:6] 为指定该数据哪些列需要求和
sum(axis=1) 为指定聚合函数并设置按行或列进行求和