pandas介绍——基础操作(9)

大家好,这次继续python另外一个包的学习~pandas

1.pandas Series操作

首先让我们重新在jupyter notebook中导入各种包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

这里简单提一下,matplotlib和seaborn两个包都是我们接下来会用到的包,是用来画图的,所以在这里我们导入它们

好了,那我们开始利用pandas建立Series吧

# np.nan 代表空值
# pandas 给数据添加了标号
s1=pd.Series([1,2,3,4,np.nan,5,6,7])
s1

输出:

0    1.0
1    2.0
2    3.0
3    4.0
4    NaN
5    5.0
6    6.0
7    7.0
dtype: float64

我们可以看到,和numpy稍有不同的是,pandas会给数据元素添加一个标号,并且我们可以给pandas的元素赋予空值。

不过可以通过s1.values 读取Series的值,会发现其实就是一个array

s1.values

输出:

array([ 1.,  2.,  3.,  4., nan,  5.,  6.,  7.])

我们也可以读取pandas所建立的Series的标号,我们称之为index

# 读取的是values的标号
s1.index

输出:

RangeIndex(start=0, stop=8, step=1)

我们也可以自主的给index赋值

# 同样可以直接给index赋值
s2=pd.Series([21,23,24,25,27],index=['Jack','Lucy','John','Tina','Alex'])
s2

输出:

Jack    21
Lucy    23
John    24
Tina    25
Alex    27
dtype: int64

当然也可以利用python当中切片的特性来读取某一个或几个特定元素

s2['Jack']

输出:

21

也可以用 iloc的方式给出特定位置。 iloc可以理解为 index location

# 用iloc可以给出位置
s2.iloc[0]

输出:

21

可以用head()看Series的前几列

# 选择s2的前两行
s2.head(2)

输出:

Jack    21
Lucy    23
dtype: int64

describe()可以描述该Series的具体信息(very powerful!)

# describe直接返回该Series的很多数据结果
s2.describe()

输出:

count     5.000000
mean     24.000000
std       2.236068
min      21.000000
25%      23.000000
50%      24.000000
75%      25.000000
max      27.000000
dtype: float64

对数值进行大小排序

# 对values 进行大小排序
s2.sort_values()

输出:

Jack    21
Lucy    23
John    24
Tina    25
Alex    27
dtype: int64

我们得到了这个数据后,也可以简单的用plot()来画出它的柱状图

# 画出柱状图
s2.plot.bar()

输出:



pandas 还可以将Series转化成python 原来的字典形式

# 可以利用to_dict()将Series转化成字典形式
s2_dict=s2.to_dict()
s2_dict

输出:

{'Jack': 21, 'Lucy': 23, 'John': 24, 'Tina': 25, 'Alex': 27}


当然也可以转化回去,从字典变成Series

s2_series=pd.Series(s2_dict)
s2_series

输出:

Jack    21
Lucy    23
John    24
Tina    25
Alex    27
dtype: int64


再看一个简单的例子

name=['Jack','Lucy','John','Julia','Tina','Alex','Lucy']
# 更新index,可以添加之前没有index,例如julia,values会自动填充为NaN
# 此处,Lucy名字重复两次,values的值是一样的
s2_new=pd.Series(s2_dict,index=name)
s2_new

输出:

Jack     21.0
Lucy     23.0
John     24.0
Julia     NaN
Tina     25.0
Alex     27.0
Lucy     23.0
dtype: float64

可以用 isnull() 判断是否为空值

# 判断是否为空值
pd.isnull(s2_new)

输出:

Jack     False
Lucy     False
John     False
Julia     True
Tina     False
Alex     False
Lucy     False
dtype: bool


2.DataFrame

第二部分稍微进阶一丢丢~DataFrame类似于创建出一个表格

# 创建一个DataFrame
df=pd.DataFrame({'Student_1':[90,100,95],'Student_2':[60,80,90]},index=['Monday','Wednesday','Friday'])
df

输出:


和刚才一样,我们可以自己定义表格index和columns,index是纵向标题,columns是横向标题

# 也可以单独列写横行的标题,记作columns
df1=pd.DataFrame([[1,2,3],[4,5,6]],index=['A','B'],columns=['C1','C2','C3'])
df1

输出:


相应的我们也可以读取它的很多数据和属性

# 可以读取df1这个DataFrame的值
df1.values

输出:

array([[1, 2, 3],
       [4, 5, 6]], dtype=int64)

读取它的index或者columns都可以

# 行的标号
df1.columns

输出:

Index(['C1', 'C2', 'C3'], dtype='object')

之前很多的操作在这里都可以重复实现,比如转置矩阵,shape(), size(),head()等函数都可以使用

比如

# 用describe()来添加对df1的每一列描述
df1.describe()

输出:


再次利用 loc函数

# 利用loc给出‘B’,给出的是B这一行的元素的信息
df1.loc['B']

输出:

C1    4
C2    5
C3    6
Name: B, dtype: int64

指定特定位置的元素

# 选取指定行列的元素
df1.loc['B']['C2']

输出:

5

可以直接对df1进行元素的加减

df1+10*15

输出:


然后介绍lambda函数

# 修改C2这一列的数值
# apply()意思是实施
# lambda 可以重新对x进行赋值
df1['C2']=df1.apply(lambda x: x['C2']**2+10, axis=1)
df1

输出:


以及更为复杂的变换

# assign 用于赋值
# C2这一列的元素平方加10,
# C3这一列的元素乘以2再减10
# loc['A']选择A这一行的元素进行操作
# max()选择A这一行的其中最大值

# C2这行经过变化是206
# C1这行还是1
# C3这行经过变化是-4
# 所以最大值输出为206

df1.assign(C2=lambda x:x['C2']**2+10,
           C3=lambda x:x['C3']*2-10).loc['A'].max()

输出:

206

下一节将会用实际例子来介绍更为复杂pandas操作,谢谢~





Student_1Student_2Monday9060Wednesday10080Friday9590

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值