Pandas基础功能备忘录

pandas中的重要数据结构

Series:

Series类似与一维数组,它可以由两个属性来表示:indexvalues

In [127]: obj = pd.Series([4, 7, -5, 3])
In [128]: obj.index
Out[128]: 
RangeIndex(start=0, stop=4, step=1)
In [129]: obj.values
Out[129]: 
array([ 4,  7, -5,  3], dtype=int64)

同时,Series又和Python中的字典密不可分。

In [57]: sdata = {'what': 23, 'amazing': 6, 'happened': 23}
In [58]: sdata
Out[58]: 
{'amazing': 6, 'happened': 23, 'what': 23}
In [60]: obj3 = pd.Series(sdata)
In [61]: obj3
Out[61]: 

amazing      6
happened    23
what        23
dtype: int64

不存在的值可以用pd.isnull()pd.notnull()来判断,此外,Series及其中的索引(index)都可以有名字,也就是Series.nameSeries.index.name

DataFrame:

DataFrame用于处理二维数据。如果把Series看成一个列向量,那么DataFrame就是一个列向量组,它与数组和字典同样保持着密切的联系。DataFrame有三个重要的属性:index行索引、columns列索引、values数据值。我通常把DataFrame的columns(列名)理解成Series的name属性。

下表是可以输入给DataFrame构造器的数据

类型说明
二维ndarray数据矩阵,还可以传入行标和列标
有数组、列表或元组组成的字典每个序列会变成DataFrame的一列。所有序列的长度必须相同
Numpy的结构化/记录数组类似于“由数组组成的字典”
由Series组成的字典每个Series会成为一列。如果没有显示指定索引,则各Series的索引会被合并成结果的行索引
由字典组成的字典各内层字典会成为一列。键会被合并成结果的行索引,跟“由Series组成的字典”情况一样
字典或Series的列表各项将会成为DataFrame的一行。字典键或Series索引的并集将会成为DataFrame的列标
由列表或元组组成的列表
另一个DataFrame
Numpy的MarkedArray类似于“二维ndarray”的情况,只是掩码值再结果DataFrame会变成NA/缺失值

对于数据类型,可以在导入给DataFrame构造器时通过pd.DataFrame()中的参数dtype来确定,或者在导入后通过testdf['列名'].astype()来改变。默认情况下,如果DataFrame各列的数据类型不同,则值数组的数据类型就会选用能兼容所有列的数据类型,通常是python.object

Pandas中的主要索引对象

index对象是不可修改的(immutable),因此用户不能对其进行修改,但是可以替换。不可修改行非常重要,因为这样才能使index对象再多个数据结构之间安全共享。

重新索引的方法有二
testseries.reindex()testdf.reindex(),但是这个函数只支持输入不重复的情况
直接改变series或者dataframe的 index属性

reindex函数的参数:

参数说明
index用做索引的新序列。既可以是Index实例,也可以是其他序列的Python数据结构。Index会被完全使用,就像没有任何复制一样
method插值(填充)方式
fill_value在重新索引的过程中,需要引入缺失值时使用的替代值
limit前向或后向填充时的最大最大填充量
level在MultiIndex的指定级别上匹配简单索引,否则选取其子集
copy默认为True,无论如何都复制;如果为False,则新旧相等就不复制

reindex的method选项:

参数说明
ffill或pad前向填充(或搬运)值
bfill或backfill后向填充(或搬运)值

pandas中主要的index对象:

说明
Index最泛化的Index对象,将轴标签表示为一个有Python对象组成的Numpy数组
Int64Index针对整数的特殊Index
MultiIndex“层次化”索引对象,表示单个轴上的多层索引。可以看做有元组组成的数组
DatetimeIndex存储纳秒级时间戳(用Numpy的datetime64类型表示)
PeriodIndex针对Period数据(时间间隔)的特殊Index

index的方法和属性

方法说明
append连接另一个index对象,产生一个新的index
diff计算差集,并得到一个新的index
intersection计算交集
union计算并集
isin计算一个指示各值是否都包含在参数集合中的bool型数组
delete删除suoyini处的元素,并得到新的index
drop删除传入的值,并得到新的index
insert将元素插入到索引i处,并得到新的index
is_monotonic当各元素均大于等于前一个元素时,返回True
is_unique当index中没有重复元素时,返回True
unique计算index中唯一值的数组

索引、选取和过滤

10 minutes to pandas
PS:可以通过选取来构建新的DataFrame

In [94]: data
Out[94]: 

   A  B   C  E
a  0  1   2  3
b  4  5   6  4
c  8  9  10  5
In [95]: data.loc[['a', 'd'], ['A', 'B', 'D']]
Out[95]: 

     A    B   D
a  0.0  1.0 NaN

算数运算

加减乘除运算

In[98]: df1
Out[98]: 

          b  c  d
Ohio      0  1  2
Texas     3  4  5
Colorado  6  7  8
In[99]: df2
Out[99]: 

        b   d   e
Utah    0   1   2
Ohio    3   4   5
Texas   6   7   8
Oregon  9  10  11
In[100]: df1 + df2
Out[100]: 

            b   c     d   e
Colorado  NaN NaN   NaN NaN
Ohio      3.0 NaN   6.0 NaN
Oregon    NaN NaN   NaN NaN
Texas     9.0 NaN  12.0 NaN
Utah      NaN NaN   NaN NaN

灵活的算术方法

方法说明
add+
sub-
div*
mul/

DataFrame和Series之间的运算

默认情况下,Data Frame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播。如果某个索引值再DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引一形成并集。
PS: 如果希望匹配行且再列上广播,则必须使用算术运算方法。

函数应用和映射

在行或列上的函数应用
testdf.apply()
在dataframe元素级上的函数应用
f = lambda x: '%.2f' %x
testdf.applymap()
在Series上的函数应用
testseries.map(f)

排序

Series和DataFrame都有sort_index(axis=1, ascending=False)sort_values(), Series还有order()
其中axis=1表示沿列广播,ascending=False表示降序排列

汇总和计算表述统计

描述和汇总统计:

方法说明
count非NA的数量
describe针对Series或各DataFrame列计算汇总统计
min, max
argmin, argmax
quantile
sum
mean
median
mad根据平均值计算平均绝对离差
var样本值的方差
std
skew样本值的偏离度(三阶矩)
kurt样本值的峰度(四阶矩)
cumsum样本值的累计和
cummin, cummax样本和的累计最大值和累计最小值
cumprod样本值的累计积
diff计算一阶差分(对时间序列很有用)
pct_change计算百分数的变化

约简方法的选项:

选项说明
axis约简的轴。DataFrame的行用0,列用1
skipna排除缺失值,默认值为True
leve如果轴是层次化索引的(MultiIndex),则根据level分组约简

相关系数和协方差

相关系数testseries.corr(testseries)和协方差testseries.cov(testseries)返回的都是一个矩阵,矩阵的行和列是输入的索引,矩阵是对称的

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

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

方法说明
isin
unique输入是Series
value_counts返回一个Series,其索引为唯一值,其值为频率,按计数值降序排列

处理缺失数据

NA1处理方法:

方法说明
dropna根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过与之调节对缺失值的容忍度
fillna
isnull
notnull

PS:testdf[testdf.notnull()] == testdf.dropna()2
fillna函数的参数:

参数说明
value用于填充缺失值的标量值或字典对象
method插值方式。如果函数调用时为指定其他参数的话,默认为”ffill”
axis
inplace默认”False”修改调用者对象而不产生副本
limit可以连续填充的最大数量

层次化索引

层次化索引是pandas的一项重要功能,它使你能在一个周上拥有多个索引级别。每一层都可以有名字。
对于一个双层的Series,可以testseries.unstack(); 相反,对于一个DataFrame,可以testdf.stack()

In [114]: frame
Out[114]: 

   a  b    c  d
0  0  7  one  0
1  1  6  one  1
2  2  5  one  2
3  3  4  two  0
4  4  3  two  1
5  5  2  two  2
6  6  1  two  3
In [115]: frame2 = frame.set_index(['c', 'd'], drop=False)
In [116]: frame2
Out[116]: 

       a  b    c  d
c   d              
one 0  0  7  one  0
    1  1  6  one  1
    2  2  5  one  2
two 0  3  4  two  0
    1  4  3  two  1
    2  5  2  two  2
    3  6  1  two  3
In [119]: frame2 = frame.set_index(['c', 'd'], drop=True)
In [120]: frame2
Out[120]: 

       a  b
c   d      
one 0  0  7
    1  1  6
    2  2  5
two 0  3  4
    1  4  3
    2  5  2
    3  6  1
In[121]: frame2.reset_index()
Out[121]: 

     c  d  a  b
0  one  0  0  7
1  one  1  1  6
2  one  2  2  5
3  two  0  3  4
4  two  1  4  3
5  two  2  5  2
6  two  3  6  1

  1. 在处理确实数据NA时,None也被当作缺失值处理。
  2. dropna()的参数how='all表示删除全是NAN的行,how='any'表示删除所有带NAN的行,是默认的。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值