Pandas数据处理误区要知其然知其所以然

背景

在Python里面处理数据,必然离不开Pandas,但目前网上的文章大部分都是介绍函数怎么使用,至于为什么有时数据处理结果是错误的,并没有深入研究,也可能是由于Pandas的一些BUG,没有人提出,下面介绍几个误区,看与你一直以为的一样吗

数据准备

平时大家都是从其他一些文件或数据库导入,在这里直接手动模拟一些数据,大家可以仔细看看这些数据有什么区别

>>> import pandas as pd
>>> df=pd.DataFrame({'x':[1,1,2,3,4,5,5,6],
                     'y':['A','B','C','D','E','F','E','A'],
                     'z':[11,21,32,34,'65',56,31,45]})
>>> df
   x  y   z
0  1  A  11
1  1  B  21
2  2  C  32
3  3  D  34
4  4  E  65
5  5  F  56
6  5  E  31
7  6  A  45

df['x'] 与 df[['x']] 区别

乍一看上去,这两个可能并没有什么区别,都是对x列的引用,其实是有区别的,并且区别还是比较大,不信就看看

>>> df['x']
0    1
1    1
2    2
3    3
4    4
5    5
6    5
7    6
Name: x, dtype: int64
>>> df[['x']]
   x
0  1
1  1
2  2
3  3
4  4
5  5
6  5
7  6
>>>
df['x'] 与 df[['x']]区别

上面程序打印结果一下看不出什么区别,下面的图片是不是一下就有区别了,为什么一个没有显示格式,一个是有格式;一个显示变量名称、数据类型,一个什么都没有,那就接着往下看,打印一下他们是Pandas里面的什么类型

>>> type(df['x'])
<class 'pandas.core.series.Series'>
>>> type(df[['x']])
<class 'pandas.core.frame.DataFrame'>

是不是恍然大悟,虽然都是对x列变量的引用,但是返回的结果是不一样的,一个是Series,一个是DataFrame,那么后续在这个结果上的操作肯定也是有很大区别,Series与DataFrame的方法、属性 各有千秋,区别很大

数据类型'object'

在创建数据时,一共创建了3列,其中x列与z列看出有什么区别了吗?没有仔细看的认为两列不都是数值吗???,其实并不然

>>> df.dtypes
x     int64
y    object
z    object
dtype: object

怎么z列是object类型,那就再看一下创建数据时的z到底是什么:'z':[11,21,32,34,'65',56,31,45],中间的'65'是字符型,所以导致zobject类型,也就说明:pandas在检查数据类型时,当遇到数值型与字符型时,用字符型类型来代表这一列的类型,但里面每个值具体的类型还是原来的真实类型;都是数值型的则会转变,具体测试如下所示

>>> df1=pd.DataFrame({'x':[1,1,2,3.0,4,5,5,6],'y':['A','B','C','D','E','F','E','A']})
>>> df1
     x  y
0  1.0  A
1  1.0  B
2  2.0  C
3  3.0  D
4  4.0  E
5  5.0  F
6  5.0  E
7  6.0  A
>>> df1.dtypes
x    float64
y     object
dtype: object
>>> df
   x  y   z
0  1  A  11
1  1  B  21
2  2  C  32
3  3  D  34
4  4  E  65
5  5  F  56
6  5  E  31
7  6  A  45
>>> for i in df['z']:
      print(type(i))
<class 'int'>
<class 'int'>
<class 'int'>
<class 'int'>
<class 'str'>
<class 'int'>
<class 'int'>
<class 'int'>
>>> for i in df1['x']:
      print(type(i))
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
<class 'float'>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据人阿多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值