一篇博客入门pandas模块

一篇blog入门pandas

pandas之于python就犹如屠龙刀之于江湖,没有pandas的python之路注定是艰难的,而pandas的知识点兼具复杂和多样

这篇文章将带领我们入门pandas,让我们学会基础的数据处理。

话不多说,上代码

import pandas as pd
import numpy as np
obj = pd.Series([4,7,-5,3])
obj

out:

0    4
1    7
2   -5
3    3
dtype: int64

就像numpy的array()方法一样,pandas也有自己常用的数据结构
Series and DataFrame

Series

是一个一维的数组型对象,它包含了值序列和序列

print(obj.values)
obj.index
[ 4  7 -5  3]
RangeIndex(start=0, stop=4, step=1)
#自定义索引
obj2 = pd.Series([4,7,-5,3],index = ['d','b','a','c'])
obj2
d    4
b    7
a   -5
c    3
dtype: int64
Series之间进行加减
obj3 = pd.Series(pd.Series([4,7,-5,3,1],index = ['d','b','a','c','e']))
print(obj3+obj2)
a   -10.0
b    14.0
c     6.0
d     8.0
e     NaN
dtype: float64

这时候应该注意到obj2的index中没有’e’,最后相加得到的Series中索引’e’为空
得:
在Series的加减中,如果一方索引为空,那么相加的索引也必为空

So
甲方:不能为空!我要想为什么为什么

print(obj3.add(obj2,fill_value = 0))#0可以用任意数字代替
a   -10.0
b    14.0
c     6.0
d     8.0
e     1.0
dtype: float64

DataFrame表示的是矩阵的数据表。既有行索引也有列索引,在DataFrame中,数据被存储在一个二维块中

构建DataFrame

data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada','Nevada'],
                    'year':[2000,2001,2002,2001,2002,2003],
                    'pop':[1.5,1.7,3.6,2.4,2.9,3.2]}
frame = pd.DataFrame(data)
#查看frame的top5行
print(frame.head)
print(frame.head())#都可以,嘿嘿嘿,贴心

<bound method NDFrame.head of     state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9
5  Nevada  2003  3.2>
    state  year  pop
0    Ohio  2000  1.5
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  2.4
4  Nevada  2002  2.9

Dataframe的一些基本操作

#更改列的顺序
pd.DataFrame(data,columns=['year','state','pop'])
yearstatepop
02000Ohio1.5
12001Ohio1.7
22002Ohio3.6
32001Nevada2.4
42002Nevada2.9
52003Nevada3.2
#更改Dataframe中的部分值
frame[3:]['pop'] = 1.1
frame.iloc[4:]['pop'] = 2.2
frame.loc[5:]['pop'] = 3.3
#上述三种情况都可以运行,但是采取下面的这种方法才比较正规
frame.loc[0,'pop'] = 4.4
print(frame)
    state  year  pop
0    Ohio  2000  4.4
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  1.1
4  Nevada  2002  2.2
5  Nevada  2003  3.3

那么通过loc和iloc选择数据时有什么不同么?
loc 允许使用轴标签
iloc 允许使用整数标签

data_loc = pd.DataFrame(np.arange(16).reshape((4,4)),index = ['a','b','c','d'],columns=['A','B','C','D'])
print(data_loc.loc[:'b',:'B'])
print(data_loc.iloc[2:,:2])
   A  B
a  0  1
b  4  5
    A   B
c   8   9
d  12  13

当你想在frame中再添加一列

print(frame)
val = pd.Series(range(6),index=range(6))
frame['num'] = val
print(frame)
    state  year  pop
0    Ohio  2000  4.4
1    Ohio  2001  1.7
2    Ohio  2002  3.6
3  Nevada  2001  1.1
4  Nevada  2002  2.2
5  Nevada  2003  3.3
    state  year  pop  num
0    Ohio  2000  4.4    0
1    Ohio  2001  1.7    1
2    Ohio  2002  3.6    2
3  Nevada  2001  1.1    3
4  Nevada  2002  2.2    4
5  Nevada  2003  3.3    5

添加完一行,添加一列

data = {'state':['zzy','zzy','zzy'],
                    'year':[2000,2001,2002],
                    'pop':[1.5,1.7,3.6],
                    'num':[6,7,8]}
frame2 = pd.DataFrame(data)
frame3 = frame.append(frame2)#!!!!!!!!Attention这里不能进行简单的加减
print(frame)
print('*****************************************************华丽的分隔符*******************')
print(frame2)
print('*****************************************************华丽的分隔符*******************')
print(frame3)
    state  year  pop  num
0    Ohio  2000  4.4    0
1    Ohio  2001  1.7    1
2    Ohio  2002  3.6    2
3  Nevada  2001  1.1    3
4  Nevada  2002  2.2    4
5  Nevada  2003  3.3    5
*****************************************************华丽的分隔符*******************
  state  year  pop  num
0   zzy  2000  1.5    6
1   zzy  2001  1.7    7
2   zzy  2002  3.6    8
*****************************************************华丽的分隔符*******************
    state  year  pop  num
0    Ohio  2000  4.4    0
1    Ohio  2001  1.7    1
2    Ohio  2002  3.6    2
3  Nevada  2001  1.1    3
4  Nevada  2002  2.2    4
5  Nevada  2003  3.3    5
0     zzy  2000  1.5    6
1     zzy  2001  1.7    7
2     zzy  2002  3.6    8

所以当你想要在你的Dataframe中再添加一列的时候,不要忘了给你的数据赋index
添加之后,就应该删除了 del

del frame['pop']
frame
stateyearnum
0Ohio20000
1Ohio20011
2Ohio20022
3Nevada20013
4Nevada20024
5Nevada20035

列删除完了,删除行

new_frame = frame.drop([4,5])
print(new_frame)
print('*****************************************************华丽的分隔符*******************')
new_frame = new_frame.drop(['num'],axis = 1)
print(new_frame)

    state  year  num
0    Ohio  2000    0
1    Ohio  2001    1
2    Ohio  2002    2
3  Nevada  2001    3
*****************************************************华丽的分隔符*******************
    state  year
0    Ohio  2000
1    Ohio  2001
2    Ohio  2002
3  Nevada  2001

转置

frame.T
012345
stateOhioOhioOhioNevadaNevadaNevada
year200020012002200120022003
num012345
frame.values
array([['Ohio', 2000, 0],
       ['Ohio', 2001, 1],
       ['Ohio', 2002, 2],
       ['Nevada', 2001, 3],
       ['Nevada', 2002, 4],
       ['Nevada', 2003, 5]], dtype=object)
frame.index
RangeIndex(start=0, stop=6, step=1)

在进行数据处理的时候不免会用到,更改索引的情况
重建索引

obj = pd.Series([2,3,4,5,6],index=['a','b','c','d','e'])
print(obj)
obj2 = obj.reindex(['e','d','c','b','a','f'])
obj2
a    2
b    3
c    4
d    5
e    6
dtype: int64





e    6.0
d    5.0
c    4.0
b    3.0
a    2.0
f    NaN
dtype: float64

如果某个索引值之前不存在,则会引入缺失值NAN
那么必然就有新的需求了,产品要求我们不能引入缺失值

obj3 = pd.Series(['a','b','c'],index = range(0,6,2))
print(obj3)
obj4 = obj3.reindex(range(6),method = 'bfill')#向后填充
obj5 = obj3.reindex(range(6),method = 'ffill')#向前填充
print(obj4)
print(obj5)
0    a
2    b
4    c
dtype: object
0      a
1      b
2      b
3      c
4      c
5    NaN
dtype: object
0    a
1    a
2    b
3    b
4    c
5    c
dtype: object

切片

普通切片是不包含尾部的,但是Series切片包含尾部!!!!!!!!!!

print(obj)
print(type(obj))
obj['a':'e']
a    2
b    3
c    4
d    5
e    6
dtype: int64
<class 'pandas.core.series.Series'>





a    2
b    3
c    4
d    5
e    6
dtype: int64

Dataframe常用的就是针对某一行 or 某一列进行操作

data_loc
ABCD
a0123
b4567
c891011
d12131415
f = lambda x:x.max() - x.min()
print(data_loc.apply(f))
#针对行进行操作 
print('*****************************************************华丽的分隔符*******************')
print(data_loc.apply(f,axis = 1))
A    12
B    12
C    12
D    12
dtype: int64
*****************************************************华丽的分隔符*******************
a    3
b    3
c    3
d    3
dtype: int64

传一个有时候不能满足实际需求,传多个试试

def f(x):
    return pd.Series([x.min(),x.max()],index=['min','max'])
print(data_loc.apply(f))
      A   B   C   D
min   0   1   2   3
max  12  13  14  15

在实际应用中,更多的时候需要对Dataframe中的元素进行操作

format_ =  lambda x:'%.2f' % x
print(data_loc.applymap(format_))
       A      B      C      D
a   0.00   1.00   2.00   3.00
b   4.00   5.00   6.00   7.00
c   8.00   9.00  10.00  11.00
d  12.00  13.00  14.00  15.00

排序环节

data_loc.sort_values(by = ['A'],axis=0,ascending=False)#A为排序键,可以设置多列;0代表行列排序;False代表降序排列
ABCD
d12131415
c891011
b4567
a0123
data_loc.sort_index(axis=0,ascending=False)   #按照索引降序排列
ABCD
d12131415
c891011
b4567
a0123

概率论相关操作

data_loc.sum()#min()   mean()   argmin()最小值的索引位置。
ABCD
a0123
b4567
c891011
d12131415

Q:当遇见空值怎么办呢?
A:默认空值会被当作0,当参数skipna = False时,和空值进行运算的结果也会为空

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值