前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分析 ——— pandas基础(二)

数据分析 ——— pandas基础(二)

作者头像
andrew_a
发布2019-08-06 16:45:42
7160
发布2019-08-06 16:45:42
举报
文章被收录于专栏:Python爬虫与数据分析

在了解了pandas数据结构之后,我们来了解一下pandas的统计功能,数据的迭代,排序等

一、pandas描述统计

通过pandas来计算DataFrame上的描述性统计信息。比如计算求和sum(), 平均值mean(),标准差std()等。

代码语言:javascript
复制
import pandas as pd
import numpy as np

data = {'Name':pd.Series(['AI','BI','CI','DI','EI','FI','GI','HI','II','JI','KI','LI']),
     'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}
df = pd.DataFrame(data)
# print(df)

# sum求和,行进行求和, axis=0(默认为)
print('行求和:\n',df.sum())
print('列求和:\n',df.sum(1)) # 列求和
print('均值:\n',df.mean()) # 求均值
print('标准差:\n',df.std()) # 求标准差
print('中间值:\n',df.median()) # 求中间值
print('最大值:\n',df.max()) # 求最大值
print('最小值:\n',df.max()) # 求最小值
"""
运行结果:
行求和:
 Age                            382
Name      AIBICIDIEIFIGIHIIIJIKILI
Rating                       44.92
dtype: object
列求和:
 0     29.23
1     29.24
2     28.98
3     25.56
4     33.20
5     33.60
6     26.80
7     37.78
8     42.98
9     34.80
10    55.10
11    49.65
dtype: float64
均值:
 Age       31.833333
Rating     3.743333
dtype: float64
标准差:
 Age       9.232682
Rating    0.661628
dtype: float64
中间值:
 Age       29.50
Rating     3.79
dtype: float64
最大值:
 Age        51
Name       LI
Rating    4.8
dtype: object
最小值:
 Age        51
Name       LI
Rating    4.8
dtype: object
"""

使用函数describe()进行数据汇总:

代码语言:javascript
复制
# 数据汇总
data = {'Name':pd.Series(['AI','BI','CI','DI','EI','FI','GI','HI','II','JI','KI','LI']),
     'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}
df = pd.DataFrame(data)
df.describe() # 图一
df.describe(include='all')  # 图二

运行结果:

使用describe()函数进行数据汇总时,会将字符串类型的数据略去,include='all'汇总所有数据。

二、pandas迭代数据

对Pandas对象进行基本迭代的行为取决于类型。在遍历一个Series时,它被视为类似数组,并且基本迭代产生这些值。其他数据结构(如DataFrame和Panel)遵循 类似于字典的 惯例,即迭代对象的键 。

1)迭代dataframe会给出列名:

代码语言:javascript
复制
# 迭代DataFrame
import pandas as pd
import numpy as np
N=20
df = pd.DataFrame({
    'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
    'x': np.linspace(0,stop=N-1,num=N),
    'y': np.random.rand(N),
    'C': np.random.choice(['Low','Medium','High'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
    })
# print(df)
# 在迭代时迭代的是列名称
for col in df:
    print(col)

"""
输出:
           A       C           D     x         y
0  2016-01-01  Medium   88.740476   0.0  0.281525
1  2016-01-02  Medium   92.061160   1.0  0.148344
2  2016-01-03    High   93.057051   2.0  0.155406
3  2016-01-04    High  108.589210   3.0  0.081465
4  2016-01-05    High   95.277005   4.0  0.517087
迭代之后:
A
C
D
x
y
"""

2)df.iteritems()每列作为关键字进行迭代

代码语言:javascript
复制
df =  pd.DataFrame(np.random.randn(4,3), columns=['col1','col2','col3'])
# print(df,'\n')
for key, value in df.iteritems():
    print(key, value)
    
"""
输出:
col1 0   -0.289047
1   -0.320416
2    0.685304
3   -0.807813
Name: col1, dtype: float64
col2 0    0.592411
1   -0.338110
2    1.103685
3    1.122862
Name: col2, dtype: float64
col3 0   -0.348556
1   -0.492590
2    0.884927
3    0.935640
Name: col3, dtype: float64
"""

3)df.iterrows()迭代每行数据

代码语言:javascript
复制
# iterrows()返回产生每个索引值的迭代器,以及包含每行数据的序列
df =  pd.DataFrame(np.random.randn(4,3), columns=['col1','col2','col3'])
# print(df,'\n')
for row_index, row in df.iterrows():
    print(row_index, row)
"""
输出:
0 col1   -0.087832
col2   -1.324081
col3    1.313132
Name: 0, dtype: float64
1 col1    0.329817
col2    0.342322
col3    1.289371
Name: 1, dtype: float64
2 col1   -0.053737
col2    0.161058
col3    0.523620
Name: 2, dtype: float64
3 col1   -1.178437
col2    1.218258
col3   -1.160780
Name: 3, dtype: float64
"""   

4) df.itertuples()

代码语言:javascript
复制
# itertuples()方法将返回一个迭代器
df =  pd.DataFrame(np.random.randn(4,3), columns=['col1','col2','col3'])
# print(df,'\n')
for row in df.itertuples():
    print(row)
"""
输出:
Pandas(Index=0, col1=0.5457537018288817, col2=-0.37401151450088643, col3=-2.235913835211911)
Pandas(Index=1, col1=-1.4238446924342996, col2=-0.4261995350415312, col3=0.08808519885568705)
Pandas(Index=2, col1=0.11412449447969304, col2=0.08229900426917722, col3=1.2282534332216126)
Pandas(Index=3, col1=0.20299122204228656, col2=-0.9408608550972959, col3=-1.1829619921986732)
"""

三、pandas进行排序

pandas有两种排序方式:按标签,按照实际值排序

1)按照标签排序:

使用 sort_index()方法,通过传递轴参数和排序顺序,可以对DataFrame进行排序。

默认情况下,按行标签按升序排序。

代码语言:javascript
复制
df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=['col2','col1'])
# 按照标签排序
sorted_index = df.sort_index()
print(sorted_index)
# ascending设置排序顺序
sorted_index1 = df.sort_index(ascending=False)  # 逆序 
print(sorted_index1)
"""
输出:
       col2      col1
0 -0.262209 -1.007928
1 -0.763948  0.437940
2  0.805323 -0.658554
3  0.913086  0.513868
4 -1.719606  0.319443
5 -0.324522  0.658691
6  0.864936  0.866245
7  1.719902  0.822576
8  0.202719  0.062738
9 -0.490119  0.028284

       col2      col1
9 -0.490119  0.028284
8  0.202719  0.062738
7  1.719902  0.822576
6  0.864936  0.866245
5 -0.324522  0.658691
4 -1.719606  0.319443
3  0.913086  0.513868
2  0.805323 -0.658554
1 -0.763948  0.437940
"""

2)对列进行排序

通过传递值为0或1的轴参数,可以在列标签上完成排序。默认情况下,axis = 0,按行排序。

代码语言:javascript
复制
df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=['col2','col1'])
print(df)
# 对列进行排序
sorted_df_co = df.sort_index(axis=1)
print(sorted_df_co)
"""
输出:
       col2      col1
1 -2.032845 -1.434663
4  1.457698  1.156929
6 -1.892306  0.216095
2 -0.765713  0.477362
3 -0.662442  1.267198
5  1.408257 -0.248056
9  1.919813  0.316756
8 -1.677476  1.191825
0 -0.054794 -1.004566
7  0.940486  0.565741

       col1      col2
1 -1.434663 -2.032845
4  1.156929  1.457698
6  0.216095 -1.892306
2  0.477362 -0.765713
3  1.267198 -0.662442
5 -0.248056  1.408257
9  0.316756  1.919813
8  1.191825 -1.677476
0 -1.004566 -0.054794
7  0.565741  0.940486
"""

3)按值排序

像索引排序一样,sort_value()是按值排序的方法。它接受一个'by'参数,该参数将使用DataFrame的列名与值进行排序。

代码语言:javascript
复制
# 按照值排序
unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1') 
print(sorted_df)
"""
输出:
   col1  col2
1     1     3
2     1     2
3     1     4
0     2     1
"""
代码语言:javascript
复制
# 通过参数by进行列值排序
unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by=['col1','col2'])
print(sorted_df)
"""
输出:
   col1  col2
2     1     2
1     1     3
3     1     4
0     2     1
"""

4)排序算法

sort_value() 提供了一个从mergesort,heapsort和quicksort中选择算法的规定。Mergesort是唯一稳定的算法。

代码语言:javascript
复制
# mergesort排序算法
unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
sorted_df = unsorted_df.sort_values(by='col1', kind='mergesort')

print(sorted_df)
"""
输出:
   col1  col2
1     1     3
2     1     2
3     1     4
0     2     1
"""
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python爬虫scrapy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档