走上数据分析之路【三】——Pandas常用功能及函数【二】

前言

接上次Pandas常用函数,一方面为了记录,另一方面方便以后查阅复习。Pandas应该会写好几个系列。

正文

【1】DataFrame的加减乘除:
可以直接:

df1 + df2; df1 - df2; df1 * df2; df1 / df2;

但我觉得用df1.add(df2)更好,因为可以通过fill_value参数将nan值设置为特定值。
例如:

a = DataFrame(np.array([[np.nan, 2, 3],[4, 5, 6]]))
b = DataFrame(np.array([[1, 2, 3],[0, 5, 6]]))
print("a+b = \n{}".format(a+b))
print("\na+b = \n{}".format(a.add(b,fill_value=0)))

结果:

a+b = 
     0     1     2
0  NaN   4.0   6.0
1  4.0  10.0  12.0

a+b = 
     0     1     2
0  1.0   4.0   6.0
1  4.0  10.0  12.0

四种运算:

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

【2】函数应用到每一个元素apply

形式:obj.apply(f)

obj既可以是DataFrame也可以是Series,f是定义的函数(可用def或lambda定义),具体参考代码:

def f1(x):
    return(x**2+x-1)
f2 = lambda x:x**2+x+1

a = Series(np.arange(10))
a.apply(f1)
a.apply(f2)

#结果
0    -1
1     1
2     5
3    11
4    19
5    29
6    41
7    55
8    71
9    89
dtype: int64

0     1
1     3
2     7
3    13
4    21
5    31
6    43
7    57
8    73
9    91
dtype: int64

不过像常用的函数DataFrame都已经封装好了,一般不用自己再去定义了。
【3】排序sort_index

形式:obj.sort_index()

(1)按索引排序:
可以按照列或者行索引来排序,见代码:

a = DataFrame(np.arange(10).reshape(2, 5), index=['two', 'one'], columns=list('abdec'))
print(a)
#结果
     a  b  d  e  c
two  0  1  2  3  4
one  5  6  7  8  9
print('按行索引排序:\n{}'.format(a.sort_index()))
print('按列索引排序:\n{}'.format(a.sort_index(axis=1)))
#结果
按行索引排序:
     a  b  d  e  c
one  5  6  7  8  9
two  0  1  2  3  4
按列索引排序:
     a  b  c  d  e
two  0  1  4  2  3
one  5  6  9  7  8

(2)按值排序:
这个我觉得是更常用到的,比如我们要按照某一列的值进行升序排序,这时需要用到sort_index里的by参数

a = DataFrame(np.random.randn(10).reshape(5, 2), index=list('abcde'), columns=['aa','bb'])
print(a)
#结果
         aa        bb
a  0.842502 -0.381258
b -1.025136 -0.278948
c -0.976224  0.067868
d  0.715478  0.005176
e  0.481956 -0.230099
print(a.sort_index(by='bb'))
#结果
         aa        bb
a  0.842502 -0.381258
b -1.025136 -0.278948
e  0.481956 -0.230099
d  0.715478  0.005176
c -0.976224  0.067868

P.s:通过设置axis=1可以按行排序,如果想要降序排序,则只要把ascending=False即可。
【3】相关系数和协方差
观察特征间的相关性等信息时会用到
形式:
Series1.corr(Series2) #相关系数
Series1.cov(Series2) #协方差
(注意!计算的是两个Series间重叠的、非nan的、有相同索引值的相关系数和协方差。)
Df.corr()
Df.cov()
【4】给Series中的值计数 value_couts()
这个实在是太重要和常用了

形式:Series.value_counts()

注意它的对象只能是Series,如果是DataFrame会报错
#还以上面的a为例:

# a
         aa        bb
a  0.066364  0.531851
b -0.836768  0.649175
c  0.056774 -0.558052
d -0.970745  1.042477
e -0.214167 -0.014830

a['aa'].value_counts()

#结果
-0.970745    1
 0.066364    1
-0.214167    1
-0.836768    1
 0.056774    1
Name: aa, dtype: int64

【5】判断某(些)元素是否在Series或DataFrame里:isin()
注意,isin()括号里的参数必须为列表:
a.isin(‘0’) ---->错
a.isin([‘0’]) ---->对
代码:

a = DataFrame(np.arange(10).reshape(5, 2), index=list('abcde'), columns=['aa','bb'])
print(a)
#结果
   aa  bb
a   0   1
b   2   3
c   4   5
d   6   7
e   8   9

a.isin(['2'])
#结果

      aa	bb
a	False	False
b	True	False
c	False	False
d	False	False
e	False	False

对象既可以是DataFrame也可以是Series
【6】对DataFrame的所有数据进行汇总统计 describe()
可以用来看下数据的一些特征,以刚刚的a为例:

a.describe()
#结果
	        aa	    bb
count	5.000000	5.000000
mean	4.000000	5.000000
std	3.162278	3.162278
min	0.000000	1.000000
25%	2.000000	3.000000
50%	4.000000	5.000000
75%	6.000000	7.000000
max	8.000000	9.000000

【7】对于缺失值的处理
处理数据时缺失值是经常遇到的,在Pandas中,会把缺失值所在位置用NAN(Not A Number)代替,对于缺失值的处理有4种方法:
(1)直接删除:obj.dropna()
可以直接将NAN值删去(默认是删除所有存在NAN的行,也可以设置axis=1来删除所有存在NAN的列)
代码:

a = DataFrame(np.array([[1, 2, 3],[np.nan, 5, 6],[7, 8 ,np.nan]]))
print(a)
print(a.dropna())
print(a.dropna(axis=1))
#结果
     0    1    2
0  1.0  2.0  3.0
1  NaN  5.0  6.0
2  7.0  8.0  NaN

     0    1    2
0  1.0  2.0  3.0

     1
0  2.0
1  5.0
2  8.0

通过设置参数how=‘all’将只删除全为NAN的行或列
代码:

a = DataFrame(np.array([[1, 2, 3],[np.nan, 5, 6],[np.nan, np.nan ,np.nan]]))
print(a)
print(a.dropna(how='all'))
print(a.dropna(how='all', axis=1))
#结果
     0    1    2
0  1.0  2.0  3.0
1  NaN  5.0  6.0
2  NaN  NaN  NaN

     0    1    2
0  1.0  2.0  3.0
1  NaN  5.0  6.0

     0    1    2
0  1.0  2.0  3.0
1  NaN  5.0  6.0
2  NaN  NaN  NaN

(2)替换:fillna()
我们可以用obj.fillna()来替换NAN值,其中,有三个参数较为重要

  1. inpace参数:通过设置inplace=True,可以让所有的NAN值都为具体设定的值;
  2. value参数:让所有的NAN值都为具体设定的值;
    3.method参数:类似于reindex中的method,让所有NAN值都为具体的数值,如mean

其中,inplace会改变原对象,而value不会
代码:

a = DataFrame(np.array([[1, 2, 3],[np.nan, 5, 6],[np.nan, np.nan ,np.nan]]))
print(a)
#结果
     0    1    2
0  1.0  2.0  3.0
1  NaN  5.0  6.0
2  NaN  NaN  NaN

a.fillna(value=1)
print(a)
a.fillna(1, inplace=True)
print(a)
#结果
     0    1    2
0  1.0  2.0  3.0
1  NaN  5.0  6.0
2  NaN  NaN  NaN
     0    1    2
0  1.0  2.0  3.0
1  1.0  5.0  6.0
2  1.0  1.0  1.0

(3)isnull()和notnull()
会返回一个boll型的DataFrame对象,很好理解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SinHao22

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

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

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

打赏作者

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

抵扣说明:

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

余额充值