pandas 详细介绍
1 pandas官网
1.1 官网
https://pandas.pydata.org/
1.2 其他可用网站
2 pandas 概要介绍
Pandas 库是一个免费、开源的第三方 Python 库,是Python数据分析必不可少的工具之一。其基于numPy 库开发而来, 提供了两种数据结构,Series(一维数组结构)与 DataFrame(二维数组结构),这两种数据结构极大地增强的了 Pandas 的数据分析能力。
3 pandas之Series
3.1 概要说明
3.1.1 说明
Series是pandas中最基本的对象,类似于一维数组。实际上它就是基于numpy的一维数组ndarray发展而来的。但区别在于它提供了index,索引。
3.1.2 Series与list、ndarray区别
-
list列表
列表中的元素可以是不同的数据类型,使用从0开始的整数值作为默认索引; -
ndarray数组
数组中的元素必须是同种数据类型,也是使用从0开始的整数值作为默认索引; -
Series序列
是一种一维的结构,类似于一维列表和ndarray中的一维数组,但是功能比他们要更为强大,Series由两部分组成:索引index和数值values; -
区别
一维列表和一维数组中都是采用从0开始的整数值作为默认索引,索引值一般不显示的给出,但是我们可以通过索引去获取其中的元素。对于Series来说,默认索引也是从0开始的整数值作为默认索引,但是是显示地给出,更为强大的是,Series中的索引可以随意设置,方便我们取数
3.2 创建方式
通过构造函数来创建:
Series([data, index, dtype, name, copy, ...])
具体说来data的几种形式:
3.2.1 通过列表创建
my_list = [1,3,4,2]
se1 = pd.Series(my_list,index=list('abcd'),dtype=np.float32)
3.2.2 通过ndarray创建
my_array = np.arange(1,6)
se2 = pd.Series(my_array)
3.2.3 通过range创建
se3=pd.Series(range(0,10))
3.2.4 通过字典创建
x = dict(a=22,b=10,c=5)
y = pd.Series(x)
3.2 常用属性
se3=pd.Series(range(0,10)) #定义
- se3.values 获取值:#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)
- se3.dtype 返回类型:#dtype(‘int64’)
- se3.shape 返回元组,包括形状: #(10,)
- se3.nbytes 返回字节个数#80
- se3.ndim 返回维数 #1
- se3.size 返回数据个数 #个数
- se3.empty 是否为空,true or false
3.2 常见函数
3.2.1 取值
定义: se3=pd.Series(range(3,10),index=list(‘abcdefg’))
- se3.at[‘a’] #返回某index的某数
- se3.iat[0] #返回某位置的某数
- se3.loc[[‘a’,‘b’]] #返回某index们的某数
- se3.iloc[0:3] #返回某位置们的某数
- se3.iloc[[0,1,2]] #返回某位置们的某数
- se3.keys().to_list() #[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’]#返回所有index
- se3.items()
#所有的items(index和value的元组们)
举例:
for index,value in se3.items():
print(“index is {},value is{}\n”.format(index,value))
3.2.2 计算
加、减、乘、除、取余、乘方、取模、均值等各种运算
3.2.3 将函数传递过去、分组、window(没写)
(1) Series.apply
Series.apply(func, convert_dtype=True, args=(), **kwargs)
将series的values应用于函数,传过去的应该是所有的values
(2) Series.agg,或者Series.aggregate
Series.agg(func=None, axis=0, *args, **kwargs)
也是计算,比如pd.Series([1, 2, 3, 4]).agg(‘min’)
(3) Series.transform(func, axis=0, *args, **kwargs)
其中func可以为系统提供函数,也可以为自定义函数等,也可以为各种函数的组合。
(4)Series.map
Series.map(arg, na_action=None),传递的参数可以是dict等
比如:
s = pd.Series([‘cat’, ‘dog’, np.nan, ‘rabbit’])
s.map({‘cat’: ‘kitten’, ‘dog’: ‘puppy’})
就会输出:
s.map({'cat': 'kitten', 'dog': 'puppy'})
0 kitten
1 puppy
2 NaN
3 NaN
dtype: object
(5) Series.groupby
Series.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True)
ser.groupby(["a", "b", "a", "b"]).mean()
ser.groupby(level=0).mean()
ser.groupby(ser > 100).mean()
ser.groupby(level=0, dropna=False).sum()
3.2.4 series元素状态获取
-
Series.all() 是否所有的元素均为true
-
Series.any(),是否有元素为true
-
Series.between(left,right),是否各个元素都在left和right之间
-
Series.count() 返回非nan的个数
-
Series,max,mean,median,min,nlargest(n),nsmallest(n),sum
返回的分别是序列中的最大值、平均值、中值、最小值、最大的n个值、最小的n个值、和等 -
Series.value_counts() 返回的是一个series,存储的原series中的各个元素和出现的次数。
3.2.5 重新组合、排序等操作
- Series.align(other[, join, axis, level, …]) 合并series
- Series.drop([labels, axis, index, columns, …]) 移除某元素
- Series.drop_duplicates([keep, inplace]) 移除重复元素
- Series.duplicated([keep]) 各元素是否是重复元素
- Series.equals(other) 是否完全相同
- Series.head([n]) 前n行
- Series.isin(values) 值是否在values中
- Series.idxmax([axis, skipna]) 最大值的序号
- Series.idxmin([axis, skipna]) 最小值的序号
- Series.reindex([index]) 按照index重新展示表
- 其他一些,参见手册
3.2.6 丢失数据处理
(1) 判断是否为na
- Series.isna() 各元素是否为na
- Series.isnull() 各元素是否为na
- Series.notna() 各元素是否为na
- Series.notnull() 各元素是否为na
- Series.dropna([axis, inplace, how]) 扔掉na的剩余元素组成
- Series.fillna,Series.bfill,Series.ffill 填充,后填充,前填充等
- Series.replace(pos,value),可以是列表替换,也可以是字典替换
3.2.7 重新排序
- Series.sort_values([axis, ascending, …]) 排序
- Series.sort_index([axis, level, ascending, …]) 排序
3.2.8 连接、比较
- Series.append 连接 将二者连接
- Series.compare 比较 显示出二者的差异
3.2.9 时间相关—暂时省略
3.2.10 string相关
Series.str可以取出Series各元素,转化为str,再去进行操作
3.2.11 plot相关 Series.plot
- Series.plot.bar
- Series.plot.hist
- Series.plot.pie
- Series.plot.line
- Series.plot.box等
3.2.12 序列化相关
- Series.to_csv
- Series.to_dict
- Series.to_excel
- Series.to_xarray
- Series.to_json
- Series.to_sql
- Series.to_string
- Series.to_xarray
4 pandas之DataFrame
4.1 概要说明
是pandas中的主要数据组织形式。为二维数组,尺寸可变的,数据类型可以多种。包含行、列、可以对行、列分别处理。
可以被认为是一个存储Series的字典容器
4.2 创建方式
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)
4.2.1 由字典创建
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
df
col1 col2
0 1 3
1 2 4
4.2.2 由数组创建
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=['a', 'b', 'c'])
a b c
0 1 2 3
1 4 5 6
2 7 8 9
4.3 常用属性
- df1.index #返回行信息
- df1.columns #返回列信息
- df1.values #返回二维数组的数据
- df1.info
- df1.axes #返回列表,第一个元素是行信息,第二个元素是列信息
- df1.dtypes #类型
- df1.shape #返回包含行列信息的数组
- df1.ndim #返回维度
- df1.size #返回包含的个数
- df1.empty #是否为空dataframe,返回一个true或者false
- df1.style #同display的效果,就会格式化了
4.4 常见函数
4.4.1 取值
- df1.head(n)
- df1.tail(n)
- df1.at[‘a’,“name”]
- df1.iat[0,0]
- df1.loc[‘a’] #根据描述定位
- df1.iloc[0] #根据位置定位
- df1.keys() #相当于dict的key.
column.Index([‘name’, ‘sex’], dtype=‘object’) - df1.insert(loc,column_name,value) #插入一列,loc指的是插入位置
- df1.items()和df1.iteritems()
for label, content in df1.iteritems():
print(f'label: {label}')
print(f'content: {content}', sep='\n')
#打印的是每列的Series
- df1.pop(column_name) 把某一列去掉
- df1.where(条件) 返回的是各个元素满足此条件的情况
- df1.mask 与where相反
- df1.isin() 返回的是各个元素处于此区间的情况
4.4.2 操作
加减乘除求和求指数等等等等
指的都是当中的各个元素分别来计算.
4.4.3 传入函数当作参数
- DataFrame.apply
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)[source]
- DataFrame.agg
DataFrame.agg(func=None, axis=0, *args, **kwargs)
举例:对A列的数据求取两个函数,对B列的数据求取另外的函数
df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})
A B
sum 12.0 NaN
min 1.0 2.0
max NaN 8.0
- DataFrame.transform(func, axis=0, *args, **kwargs)
其中func可以为系统提供函数,也可以为自定义函数等,也可以为各种函数的组合。
s = pd.Series(range(3))
s
0 0
1 1
2 2
dtype: int64
s.transform([np.sqrt, np.exp])
sqrt exp
0 0.000000 1.000000
1 1.000000 2.718282
2 1.414214 7.389056
- DataFrame.groupby
函数定义:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True)
比如:
df.groupby([‘Animal’]).mean()
4.4.4 DataFrame元素状态获取
-
DataFrame.all()
如果不传参,则默认以列为单位,来判断是否各列数据均为True,返回的是一个series,index为列名.
如果传参为columns(axis=‘columns’),则以列为单位,来判断是否各列数据均为True.返回的是一个series,0,1等为列名.
如果传参为columns(axis=None),则不是各列判断,而是判断所有元素,返回一个true还是false的结果. -
DataFrame.any(),是否有元素为true, 样式同all
-
DataFrame.count() 返回各列非nan的个数, 如果传参axis=0或者’index’,则是返回各行非nan的个数
-
DataFrame,max,mean,median,min,nlargest(n),nsmallest(n),sum
返回的分别是序列中的最大值、平均值、中值、最小值、最大的n个值、最小的n个值、和等 -
DataFrame.value_counts() 返回的是一个series,存储的原series中的各个元素和出现的次数。!!!但是这个官网说是有,但是试验时又提醒错误,说没有.
4.4.5 DataFrame重新组合、排序等操作
- DataFrame.align 合并
- DataFrame.drop 移除某元素
- DataFrame.drop_duplicates 移除重复元素
- DataFrame.duplicated 各元素是否是重复元素
- DataFrame.equals 是否完全相同
- DataFrame.head 前n行
- DataFrame.filter可以过滤出某列或者某模糊字段等
- DataFrame.first
- DataFrame.last
- DataFrame.isin(values) 值是否在values中
- DataFrame.idxmax([axis, skipna]) 最大值的序号
- DataFrame.idxmin([axis, skipna]) 最小值的序号
- DataFrame.reindex([index]) 按照index重新展示表
- DataFrame.reindex
- DataFrame.rename可以修改index或者columns
- DataFrame.set_axis
- DataFrame.set_index等
4.4.6 丢失数据处理
- DataFrame.isna() 各元素是否为na
- DataFrame.isnull() 各元素是否为na
- DataFrame.notna() 各元素是否为na
- DataFrame.notnull() 各元素是否为na
- DataFrame.dropna([axis, inplace, how]) 扔掉na的剩余元素组成
- DataFrame.fillna,DataFrame.bfill,DataFrame.ffill 填充,后填充,前填充等
- DataFrame.replace(pos,value),可以是列表替换,也可以是字典替换
4.4.7 重新排序
- DataFrame.sort_values([axis, ascending, …]) 排序
- DataFrame.sort_index([axis, level, ascending, …]) 排序
- DataFrame.nlargest(n, columns[, keep]) 对哪个column来取最大的n个
- DataFrame.nsmallest(n, columns[, keep]) 对哪个column来取最小的n个
4.4.8 连接、比较
- DataFrame.append 连接 将二者连接
- DataFrame.compare 比较 显示出二者的差异
- DataFrame.join
- DataFrame.merge
- DataFrame.update
各个的区别:
4.4.9 时间相关—暂时省略
4.4.10 plot相关 DataFrame.plot
- DataFrame.plot.area
- DataFrame.plot.bar
- DataFrame.plot.hist
- DataFrame.plot.pie
- DataFrame.plot.line
- DataFrame.plot.box等
4.4.12 序列化相关
- DataFrame.to_csv
- DataFrame.to_dict
- DataFrame.to_excel
- DataFrame.to_json
- DataFrame.to_sql
- DataFrame.to_string 等
5 pandas之其他函数
暂缺