Pandas中Series与DataFrame的使用

为什么需要Pandas

在之前的博客中介绍了numpy,numpy已经能够帮我们去处理需要处理的数值,并且提供了各种运算方法,还可以从txt,csv中读取数据。那么pandas又有什么更大的用处呢?

pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据。并且还可以从数据库乃至剪切板读取数据。而且提供了更多集成的方法辅助我们进行运算以及统计。

Pandas中常用的数据类型分为两类,一种是Series, 一维,类似于带标签数组。另一种是DataFrame 二维,类似于Series的容器。

Series

类似于数组的创建,Series可以直接使用数组进行初始化,并且使用index参数来设置数组中元素的标签:

t=pd.Series([1,3,42,52,31,1,2])
t

结果:
0     1
1     3
2    42
3    52
4    31
5     1
6     2
dtype: int64

t=pd.Series([1,3,42,52,31,1,2],index=list("abcdefg"))
print(t)
t=pd.Series([1,3,42,52,31,1,2],index=[string.ascii_uppercase[i] for i in range(7)])
print(t)
t=t.astype(float)
print(t)

结果:
a     1
b     3
c    42
d    52
e    31
f     1
g     2
dtype: int64
A     1
B     3
C    42
D    52
E    31
F     1
G     2
dtype: int64
A     1.0
B     3.0
C    42.0
D    52.0
E    31.0
F     1.0
G     2.0
dtype: float64

类似于ndarray,Series也有dtype属性,并且可以用astype修改。同时也可以使用ndarray初始化。

因为Series中拥有标签,所以某种意义上Series其实相当于Dictionary。因此Series也可以使用Dictionary初始化:

dic={"name":"Rex","age":23,"height":181}
t=pd.Series(dic)
print(t)
print(t["age"])
print(t[1])

结果:
name      Rex
age        23
height    181
dtype: object
23
23

同时Series中元素的访问既可以用索引,也可以使用标签。

切片类似于ndarray,“:”取连续切片,“,”取不连续切片。不过由于Series只是一维,所以不需要“,”来分隔维数。

Series中可以使用values直接取值,即为一维数组。

 

DataFrame

DataFrame其实就是带标签的二维数组,其中每一列都可以看做是有名字的Series。

可以用二维数组创建,也可以同Series一样使用字典创建。:

 

 

diclist=[{"name":"Rex","age":23,"height":181},{"name":"Zunrui","age":18,"height":178}]
t=pd.DataFrame(dic)
print(t)

结果:
     name  age  height
0     Rex   23     181
1  Zunrui   18     178


dic={"name":["Rex","Zunrui","Alice","Bob"],"age":[23,18,35,28],"height":[181,178,161,175]}
t=pd.DataFrame(dic)
print(t)

结果:
     name  age  height
0     Rex   23     181
1  Zunrui   18     178
2   Alice   35     161
3     Bob   28     175

Series是每一个元素都有标签,DataFrame是二维的,每一行都有行标签,参数为index,每一列也有标签,参数为columns。

DataFrame可以根据某一行来进行排序:

DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
参数含义
by指定列名(axis=0或’index’)或索引值(axis=1或’columns’)
axis若axis=0或’index’,则按照指定列中数据大小排序;若axis=1或’columns’,则按照指定索引中数据大小排序,默认axis=0
ascending是否按指定列的数组升序排列,默认为True,即升序排列
inplace是否用排序后的数据集替换原来的数据,默认为False,即不替换
na_position{‘first’,‘last’},设定缺失值的显示位置

关于切片索引,DataFrame可以使用类似ndarray的方法直接通过索引访问。同时Pandas还提供的loc以及iloc的方法辅助访问。

df.loc通过标签索引行数据

df.iloc则通过位置获取行数据

具体操作等同于ndarray的切片索引方式。需要注意的是在loc中:是左闭右闭的,即冒号前后的数据都会被访问,而一般切片索引中:是左闭右开的,不会选择到冒号后面的数据。

关于Nan

Pandas对于Nan的处理集成了比较多的方法,对比numpy实在是方便很多。

判断数据是否为NaN:   pd.isnull(df),pd.notnull(df)

处理方式1:删除NaN所在的行列dropna (axis=0, how='any', inplace=False)

处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)

处理为0的数据:t[t==0]=np.nan

当然并不是每次为0的数据都需要处理 计算平均值等情况,nan是不参与计算的,但是0会。之前在numpy的总结中是不能直接使用类似.mean()的,因为在numpy中,一旦nan在数据中参与运算,结果会直接显示为nan,而pandas中则会直接跳过,不需要更复杂的处理来计算去除nan后的结果。

相关代码:https://github.com/rexyang97/Data_science_library/blob/main/pandas.ipynb

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值