pandas

In[1]:from pandas import Series, DataFrameIn[2]:import pandas as pdpandas主要熟悉它的两个主要数据结构: Series和DataFrameSeriesseries是一种类似一维数组的对象,由一组数据(各种np数据类型)以及一组与之相关的数据标签(索引)组成。可以通过Series的value和index属性获取数组...
摘要由CSDN通过智能技术生成
In[1]:from pandas import Series, DataFrame
In[2]:import pandas as pd

pandas主要熟悉它的两个主要数据结构: Series和DataFrame

Series

series是一种类似一维数组的对象,由一组数据(各种np数据类型)以及一组与之相关的数据标签(索引)组成。

  • 可以通过Series的value和index属性获取数组表示形式和索引对象。
  • 如果没有为数据指定索引,则会自动创建一个0到n-1的整数型索引。

```python
obj = Series([4,77,-5,3],index=['d','v','a','c'])
- 与普通np数组相比,可以通过索引方式选取Series中的单个或一组值;

```python
obj['a','d'.'c']
  • np数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数)都会保留索引和值之间的链接。如下:
    在这里插入图片描述
  • 可把Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。可以用在原本需要字典参数的函数中。‘b' in obj
  • 如果数据被存放再一个py字典中,也可以直接通过这个字典来创建Series。索引即为字典的键,通过键找不到的值其结果就为NaN(即“非数字” not a number)
#sdata是个字典
obj3 = Series(sdata)
  • pandas的isnull和notnull函数可用于检测缺失数据。
    在这里插入图片描述
  • series的一个最重要的功能是:它在算术运算中会自动对齐不同索引的数据。
  • series对象本身及其索引都有一个name属性,该属性跟pandas其它的关键功能关系非常密切。
  • series的索引可以通过赋值的方式就地修改。

DataFrame

  1. 构建DataFrame的方法有很多,最常用的一种是直接传入一个由等长列表或np数组组成的字典。DataFrame会自动加上索引。传入的列在数据中找不到就会产生NA值。
    在这里插入图片描述
  2. 如果指点了序列,则DF的列就会按照指定顺序进行排列。
    在这里插入图片描述
  3. 通过类似字典标记的方式或属性的方式,可以将DF的列获取为一个Series:
    在这里插入图片描述
    注意:返回的Series拥有和原DF相同的索引,且其name属性也被相应地设置好了。
  4. 行也可以用过位置或名称的方式进行获取,比用索引字段ix。frame2.ix['three']
  5. 行和列都可以直接赋值修改。
  6. 将列表或数组赋值赋值给某个列时,其长度必须跟DF的长度相匹配。如果赋值的是Series,就会精确匹配DF的索引,索引的空位都将被填上缺失值。为不存在的列赋值会创建出新列,用del删除。del frame2['easten']
  7. 通过索引返回的列只是相应数据视图而已,不是副本。对返回的Series所做的任何修改都会反映到原DF。通过Series的copy方法即可显式地复制列。
  8. 另一种常见的构造方式式嵌套字典。如果将它传给DF,将被解释为:外层字典的键作为列,内层键则作为行索引。
pop = {'Nevada':{20012.4. 20022.9}...:'Ohio':{2000:1.5, 2001:1.7,2002:3.6}}
frame3 = DataFrame(pop)
Out:
	Nevada  Ohio
2000   NaN   1.5
2001   2.4   1.7
2002   2.9   3.6
  1. 也可以对结果进行转置。frame.T
  2. 如果显示指定了索引,则会剔除给定索引之外的数据。
  3. 在这里插入图片描述
    因为series的index的索引是2002、2001,是已经给定的。如果没有给定则可以使用0,1索引。而切片不同,切片本就是用0,1数字代表位置。series的索引可以是位置数字和给定索引同时用
  4. 在这里插入图片描述
  5. 跟Series一样,value属性也会以二维ndarray的形式返回Dataframe中的数据。如果各列的数据类型不同,则值数组的数据类型就会选用能兼容所有列的数据类型。
  6. pandas的索引对象负责管理轴标签和其它元数据(比如轴名称)。构建Series或DataFrame时,所用到的任何数组或其它序列的标签都会被转换成一个Index。
  7. Index对象不可单个修改,可以obj.index=[…] ,不可以obj.index[0] = ‘c’。不可修改性才可以使Index对象在多个数据结构之间安全共享。
  8. 在这里插入图片描述
  9. 除了长得像数组,Index的功能也类似一个固定大小的集合。每个索引都有一些方法和属性,它们可以用于设置逻辑并回答有关该索引所包含的数据的常见问题
    在这里插入图片描述
  10. index是行索引而columns是列索引。

基本功能

  1. pandas对象的一个重要方法reindex,其作用使创建一个适应新索引的新对象
obj = Series([4.5,7.2,-5.3,3.6],index=['d','b','a','c'])
obj2= obj.reindex(['a','b','c','d','e'])
#调用该Series的reindex将会根据新索引进行重排。如果某个索引值当前不存在,就引入缺失值NaN。
obj2= obj.reindex(['a','b','c','d','e'],fill_value=0)
#或者通过fill_value引入其它值
  1. 对于时间序列这样的有序数据,重新索引时可能需要做一些插值处理。method选项即可达到此目的。例如,使用ffill可以实现前向值填充。
obj3= Series(['blue','purple','yellow'],index=[0,2,4])
obj3.reindex(range(6),method='ffill')

在这里插入图片描述

  1. 对于DF,reindex可以修改(行)索引、列,或两个都修改。如果仅传入一个序列,则只会重新索引行。使用columns关键字即可重新索引列。
frame2 = frame.reindex(['a','b','c','d'])
states = ['Texas','Utah','California']
frame.reindex(columns = states)
#行和列同时索引
frame.reindex(index=['a','b','c','d'],method ='ffil',comlumns=states)

3.利用ix标签索引功能,重新索引任务可以变得更简洁,ix上的索引是闭区间

frame.ix[['a','b','c','d'],states]

在这里插入图片描述
4.使用drop方法返回的是一个在指定轴上删除了指定值的新对象。

#Series
obj.drop('c')
obj.drop(['d','c'])#删除两个标签,都是行
#DataFrame
data.drop(['Colorado','Ohio])#删除两个行
data.data('two’,axis=1)#删除一个列

  1. 标签的切片运算与普通的Python切片运算不同,其末端是包含的),右闭合。obj['b':'c']
  2. 对DF进行索引是获取列。data['one'] 得到列
ix通常会尝试像loc(标签)一样行为,但如果索引中不存在标签,则会退回到像iloc(数字代表的位置索引)一样的行为
data['one'] 得到列
data[0:1]得到行
data.ix[[行标签][列标签]] 得到区域而不是元素值
data.ix['s']  得到行
data.ix[0]  得到行
data.ix[:,0] 得到列
data.ix[:,'one']  得到列
data.ix[['Coliirado','Utah'],[3,0,1]]  得到两行,而列的顺序发生改变

在这里插入图片描述
在这里插入图片描述

算术运算和数据对齐

  1. pandas可以对不同索引的对象进行算术运算。在将对象相加时,如果不存在不同的索引对,则结果的索引就是该索引对的并集(只有两个对象有相同的索引时相加才不会NaN)。
  2. 自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播。
  3. 没有重叠的位置就会产生NaN值,使用其中一个对象的add方法,传入另外一个对象以及一个fill_value参数。df1.fill_value=0,df1.reindex(columns=df2.columns,fill_value=0
  4. 在这里插入图片描述
  5. 如果某个索引值在DF的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集。
    在这里插入图片描述
  6. 默认情况下,DF和Series之间的算术运算会将Series的索引匹配到DF的列索引,然后沿着行一直向下传播。如果希望匹配行且在列上广播(上例在行上广播),则必须使用算术运算方法
    在这里插入图片描述
    7.axis = 0 ,沿竖直方向,即沿行向下传播。

函数应用和映射

  1. Numpy的ufuncs(元素级数组方法)也可用于操作pandas对象。
  2. 将函数应用到由各列或行形成的一维数组上。DF的apply方法即可实现此功能。

在这里插入图片描述
3. 除标量值外,传递给apply的函数还可以返回由多个值组成的Series。
在这里插入图片描述
4. 也可以用元素级的Python函数。加入想得到frame中各个浮点值的格式化字符串,使用applymap即可。

5. Series有一个应用元素级函数的map方法。
在这里插入图片描述

排序和排名

数据集排序(sorting)也是一种重要的内置运算

  1. 要对行或列索引进行排序(按字典顺序),可使用sort_index方法,它将返回一个已排序的新对象。obj = Series(range(4),index=['d','a','b','c'])
  2. 面对DF,则可以根据任意一个轴上的索引进行排序。在这里插入图片描述
  3. 数据默认是按升序排序的,但也可以降序排列。
frame.sort_index(axis=1,ascending=False)
  1. 要按值对Series进行排序,可使用其order方法。 obj.order() 在排序时,任何缺失值默认都会被放到Series的末尾。
  2. 根据列中的值进行排序。将一个或多个列的名字传递给by选项即可达到该目的。frame.sort_index(by=[‘a’,‘b’])
  3. 排名(ranking)跟排序关系密切,且它会增设一个排名值。(从1开始,一直到数组中有效数据的数量)。 默认情况下,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的。 obj.rank()
  4. 也可以根据值在原数据中出现的顺序给出排名。obj.rank(method='first')
  5. 也可以按降序进行排名。obj.rank(ascending=False, method='max')
    在这里插入图片描述

带有重复值的轴索引

虽然许多pandas函数都要求标签唯一,但这并不是强制性。

  1. 索引的is_unique属性可以告诉你它的值是否是唯一的。
  2. 对于带有重复值的索引,数据选取的行为将会有些不同。如果某个索引对应多个值,则返回一个Series,而对应单个值的,则返回一个标量值。使用DF的行进行索引也是如此

汇总和计算描述统计

  1. pd对象拥有一组常用的数学和统计方法,调用DF的sum方法将会返回一个含有列小计的Series。 NA值会自动被排除,除非整个切片都是NA。通过skipna选项可以禁用该功能。
    在这里插入图片描述

  2. 有些方法返回的是间接统计(比如达到最小值或最大值的索引)
    在这里插入图片描述

  3. 另一些方法则是累计型。
    在这里插入图片描述

  4. 还有一种方法既不是简约型也不是累计型。
    在这里插入图片描述

对于非数值数据
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

相关系数与协方差

有些汇总统计是通过参数对计算出来的。

  1. Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。 cov用于计算协方差。 DF的corr和cov方法将以DF的形式返回完整的相关系数或协方差矩阵。
  2. 利用DF的corrwith方法,可以计算其列或行跟另一个Series或DF之间的相关系数。

唯一值、值计数以及成员资格

  1. uniques = obj.unique()可以得到Series中的唯一值数组,返回的唯一值是未排序的,如果需要的话,可以对结果再次进行排序(uniques.sort())
  2. obj.value_counts()用于计算Series中各值出现的频率。为了便于查看,结果Series是按值频率降序排列的。value_counts还是各顶级pandas方法,可用于任何数组或序列。
  3. isin, 它用于判断矢量化集合的成员资格,可用于选取Series中或DF中数据的子集。mask = obj.isin(['b','c'])

在这里插入图片描述

处理缺失数据

pandas使用浮点值NaN表示浮点和非浮点数组中的缺失数据。Python内置的None值也会被当做NA处理。
在这里插入图片描述

滤除缺失数据

  1. dropna对于一个Series,dropna返回一个仅含非空数据和索引值的Series。对于DF对象,可能希望丢弃全NA或含有NA的行或列。**dropna默认丢弃任何含有缺失值的行。**传入how='all’将只丢弃全为NA的那些行。
  2. 另外一个滤除DF行的问题涉及时间序列数据。假设只想留下一部分观测数据,可以用thresh参数实现此目的。

填充缺失数据
有时可能不想滤除缺失数据(有可能会丢弃跟它有关的数据),而是希望通过其它方式填补那些“空洞”。 对于大多数情况而言,fillna方法是最主要的函数。通过一个常数调用fillna就会将缺失值替换为那个常数值。
若是通过一个字典调用fillna,就可以实现对不同的列填充不同的值。
fillna默认会返回新对象,但也可以对现有对象进行就地修改。
在这里插入图片描述
在这里插入图片描述

层次化索引

层次化索引(hierarchical indexing)是pandas的一项重要功能,它能使你在一个轴上拥有多个索引级别
在这里插入图片描述
这就是带有MultiIndex索引的Series的格式化输出形式。

有时也可以在“内层”中进行选取:
在这里插入图片描述

层次化索引在数据重塑和基于分组的操作(如透视表生成)中扮演着重要的角色。
比如,可以将层次化索引通过其unstack方法重新安排到一个DF中。data.unstack() unstack的逆运算是stack
在这里插入图片描述

  • 重排分级顺序:swaplevel接收两个级别的编号或名称,并返回一个互换了级别的新对象。 而sortlevel则根据单个级别中的值对数据进行排序,交换级别时,常常也会用到sortlevel,这样最终结果就是
    有序的了。

  • 根据级别汇总统计
    许多对DF和Series的描述和汇众统计都有一个level选项,它用于指定在某条轴上求和的级别。p167

  • DF的set_index函数会将其一个或多个列转换为行索引,并创建一个新的DF。

  • reset_index的功能跟set_index刚好相反,层次化索引的级别会被转移到列里面。

其它有关pandas的话题

  1. 整数索引:
ser = Series(np.arange(3.))
ser[-1]

使用索引时很难判断出是基于标签或位置的索引。相反,对于非整数索引就没有这种歧义

使用iloc、loc、ix方法的标签

  1. 面板数据
    pandas有一个Panel数据结构,可以将其看作一个三维版的DF。可以用一个由DF对象组成的字典或一个三维ndarray来创建对象。
    在二维DF下加入层次索引形成堆积式的三维DF。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值