python学习之数据分析(五):Pandas高级


所需数据及资源下载: https://download.csdn.net/download/qq_35709559/14551784
后期文章将更在新的地址: https://chengfeizhou.github.io/

一、缺失值处理

1. 如何处理nan

对于NaN的数据, 在pandas中处理起来非常容易

  • 判断数据是否为NaNpd.isnull(df),pd.notnull(df)

处理方式:

  • 存在缺失值nan,并且是np.nan:
    • 删除存在缺失值的: dropna(axis='rows')
      • 注:不会修改原数据,需要接受返回值
    • 替换缺失值: fillna(value, inplace=True)
      • value:替换成的值;
      • inplace:True:会修改原数据; False: 不替换修改原数据,生成新的对象;
  • 不是缺失值nan,有默认标记的;
import pandas as pd
import numpy as np

# nan数据
np.nan
# => nan
np.NaN
# => nan
type(np.nan)
# => float

1.1 如何判断数据中是否包含缺失值

  • pd.isnull: 是否为空:
  • pd.notnull: 是否不为空:
data = pd.read_csv("./IMDB/IMDB-Movie-Data.csv")
data

在这里插入图片描述

np.any(pd.isnull(data))# 只要有一个为True就返回True
# => True
# 找到缺失数据,布尔索引
data[pd.isnull(data).values]

在这里插入图片描述

1.2 存在缺失值nan,并且是np.nan

  • 删除
    pandas删除缺失值, 使用dropna的前提是, 缺失值的类型必须是np.nan
# 不修改原数据
movie.dropna()

# 可以定义新的变量接受或者用原来的变量名
movie = movie.dropna()
  • 替换缺失值:
    • 填充法:(通过列的均值,中位数)

具体操作:

# 找到包含缺失值 的行或者列
pd.isnull(data).any(axis = 0) # any函数默认作用在列上;axis = 1:使其作用在行上
""" =>
Rank                  False
Title                 False
Genre                 False
Description           False
Director              False
Actors                False
Year                  False
Runtime (Minutes)     False
Rating                False
Votes                 False
Revenue (Millions)     True
Metascore              True
dtype: bool
"""
# 1.删除法:
movie = data.dropna()# 默认按行删;axis=1时,按列删
movie

在这里插入图片描述

# 2.填补法:
pd.isnull(data).any()
""" => 
Rank                  False
Title                 False
Genre                 False
Description           False
Director              False
Actors                False
Year                  False
Runtime (Minutes)     False
Rating                False
Votes                 False
Revenue (Millions)     True
Metascore              True
dtype: bool
"""
data.Metascore.mean()# 该列的均值
# => 58.98504273504273
data.Metascore.fillna(value=data.Metascore.mean(), inplace=True)# inplace参数,在原数据的基础上进行修改
data["Revenue (Millions)"].fillna(value=data["Revenue (Millions)"].mean(), inplace=True)
pd.isnull(data).any()
"""=>
Rank                  False
Title                 False
Genre                 False
Description           False
Director              False
Actors                False
Year                  False
Runtime (Minutes)     False
Rating                False
Votes                 False
Revenue (Millions)    False
Metascore             False
dtype: bool
"""

2. 不是缺失值nan,有默认标记的

数据是这样的:
在这里插入图片描述
处理思路分析:

  • 先替换‘?’为np.nan
    • df.replace(to_replace=, value=):
      • to_replace: 替换前的值;
      • value: 替换后的值;
# 把一些其它值标记的缺失值,替换成np.nan
wis = wis.replace(to_replace='?', value=np.nan)
  • 在进行缺失值的处理:
# 删除
wis = wis.dropna()

二、数据离散化

1. 什么是数据的离散化

离散化:连续属性的离散化就是将连续属性的值域上, 将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值;

离散化有很多种方法,这使用一种最简单的方式去操作

  • 原始的身高数据:165,174,160,180,159,163,192,184;
  • 假设按照身高分几个区间段:(150, 165], (165, 180], (180, 195];

这样将数据分到了三个区间段,我可以对应的标记为矮、中、高三个类别,最终要处理成一个“哑变量”矩阵;
在这里插入图片描述

2. 为什么要离散化¶

连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。

3. 如何实现数据的离散化:

案例:股票的涨跌幅离散化 对股票每日的"p_change"进行离散化

3.1 读取股票的数据

先读取股票的数据,筛选出p_change数据

import pandas as pd
stock_data = pd.read_csv("./stock_day/stock_day.csv")
p_change = stock_data.p_change
stock_data

在这里插入图片描述

p_change.head()
""" =>
2018-02-27    2.68
2018-02-26    3.02
2018-02-23    2.42
2018-02-22    1.64
2018-02-14    2.05
Name: p_change, dtype: float64
"""

3.2用的工具:

  • pd.qcut(data, bins): 对数据进行分组将数据分组 一般会与value_counts搭配使用,统计每组的个数;
  • series.value_counts(): 统计分组次数;
# 自行分组
qcut = pd.qcut(p_change, 10)
# 计算分到每个组数据个数
qcut.value_counts()
# 自行分组
ret = pd.qcut(p_change, 10) # , labels=:指定列名称
ret.head()
""" =>
2018-02-27    (1.738, 2.938]
2018-02-26     (2.938, 5.27]
2018-02-23    (1.738, 2.938]
2018-02-22     (0.94, 1.738]
2018-02-14    (1.738, 2.938]
Name: p_change, dtype: category
Categories (10, interval[float64]): [(-10.030999999999999, -4.836] < (-4.836, -2.444] < (-2.444, -1.352] < (-1.352, -0.462] ... (0.94, 1.738] < (1.738, 2.938] < (2.938, 5.27] < (5.27, 10.03]]
"""
# 计算分到每个组数据个数
ret.value_counts()

""" =>
(5.27, 10.03]                    65
(0.26, 0.94]                     65
(-0.462, 0.26]                   65
(-10.030999999999999, -4.836]    65
(2.938, 5.27]                    64
(1.738, 2.938]                   64
(-1.352, -0.462]                 64
(-2.444, -1.352]                 64
(-4.836, -2.444]                 64
(0.94, 1.738]                    63
Name: p_change, dtype: int64
"""

3.3 股票涨跌幅分组数据变成one-hot编码

  • pandas.get_dummies(data, prefix=None):
    • data: array-like, Series, or DataFrame
    • prefix: 分组名字;
# 将区间的类目型数据转换成哑变量矩阵数据
pd.get_dummies(ret)

在这里插入图片描述

3.4 自定义区间进行分组:

# 自定义区间内进行分组
ret_cut = pd.cut(p_change,[-10, -7, -2, 0, 2, 7, 10])
ret_cut.head()

""" => 
2018-02-27    (2, 7]
2018-02-26    (2, 7]
2018-02-23    (2, 7]
2018-02-22    (0, 2]
2018-02-14    (2, 7]
Name: p_change, dtype: category
Categories (6, interval[int64]): [(-10, -7] < (-7, -2] < (-2, 0] < (0, 2] < (2, 7] < (7, 10]]
"""
ret_cut.value_counts()
""" =>
(0, 2]       159
(-2, 0]      150
(2, 7]       148
(-7, -2]     117
(7, 10]       25
(-10, -7]     23
Name: p_change, dtype: int64
"""
# 画图体现一下
import matplotlib.pyplot as plt
p_change.plot(kind='hist')
plt.show()

在这里插入图片描述

# 将数据转换成哑变量矩阵
ret_cut = pd.cut(p_change, [-10, -7, -2, 0, 2, 7, 10])
pd.get_dummies(ret_cut).head()

""" =>
            (-10, -7]  (-7, -2]  (-2, 0]  (0, 2]  (2, 7]  (7, 10]
2018-02-27          0         0        0       0       1        0
2018-02-26          0         0        0       0       1        0
2018-02-23          0         0        0       0       1        0
2018-02-22          0         0        0       1       0        0
2018-02-14          0         0        0       0       1        0
"""
p_change.head()

""" =>
2018-02-27    2.68
2018-02-26    3.02
2018-02-23    2.42
2018-02-22    1.64
2018-02-14    2.05
Name: p_change, dtype: float64
"""

三、数据合并:¶

1. pd.concat实现数据合并:

  • pd.concat([data1, data2], axis=1): 按照行或列进行合并,axis=0为列索引,axis=1为行索引
stock_data.shape
""" =>
(643, 14)
"""

one_hot = pd.get_dummies(ret_cut)
one_hot.shape
""" =>
(643, 6)
"""

pd.concat([stock_data, one_hot], axis=1)# 按行合

在这里插入图片描述

2.pd.merge

  • pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,left_index=False, right_index=False, sort=True,suffixes=('_x', '_y'), copy=True, indicator=False,validate=None):

    • 可以指定按照两组数据的共同键值对合并或者左右各自
    • left: A DataFrame object
    • right: Another DataFrame object
    • on: Columns (names) to join on. Must be found in both the left and right DataFrame objects.
    • left_on=None, right_on=None:指定左右键
Merge methodSQL Join NameDescription
leftLEFT OUTER JOINUse keys from left frame only
rightRIGHT OUTER JOINUse keys from right frame only
outerFULL OUTER JOINUse union of keys from both frames
innerINNER JOIN Useintersection of keys from both frames
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                        'key2': ['K0', 'K1', 'K0', 'K1'],
                        'A': ['A0', 'A1', 'A2', 'A3'],
                        'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                        'key2': ['K0', 'K0', 'K0', 'K0'],
                        'C': ['C0', 'C1', 'C2', 'C3'],
                        'D': ['D0', 'D1', 'D2', 'D3']})
left
""" =>
key1	key2	A	B
0	K0	K0	A0	B0
1	K0	K1	A1	B1
2	K1	K0	A2	B2
3	K2	K1	A3	B3
"""

right
""" =>
	key1	key2	C	D
----------------------------
0	K0		K0		C0	D0
1	K1		K0		C1	D1
2	K1		K0		C2	D2
3	K2		K0		C3	D3
"""
# 默认内连接
result = pd.merge(left, right, on='key1')
result
""" =>

	key1	key2_x	A	B	key2_y	C	D
---------------------------------------------
0	K0		K0		A0	B0	K0		C0	D0
1	K0		K1		A1	B1	K0		C0	D0
2	K1		K0		A2	B2	K0		C1	D1
3	K1		K0		A2	B2	K0		C2	D2
4	K2		K1		A3	B3	K0		C3	D3
"""
# 右连接
result = pd.merge(left, right, how='left', on=['key1', 'key2'])
result
""" =>
	key1	key2	A	B	C	D
-----------------------------------
0	K0		K0		A0	B0	C0	D0
1	K0		K1		A1	B1	NaN	NaN
2	K1		K0		A2	B2	C1	D1
3	K1		K0		A2	B2	C2	D2
4	K2		K1		A3	B3	NaN	NaN
"""
# 左连接
result = pd.merge(left, right, how='right', on=['key1', 'key2'])
result
""" => 
	key1	key2	A	B	C	D
-----------------------------------
0	K0		K0		A0	B0	C0	D0
1	K1		K0		A2	B2	C1	D1
2	K1		K0		A2	B2	C2	D2
3	K2		K0		NaN	NaN	C3	D3
"""
# 外连接
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])
result
""" =>
	key1	key2	A	B	C	D
------------------------------------
0	K0		K0		A0	B0	C0	D0
1	K0		K1		A1	B1	NaN	NaN
2	K1		K0		A2	B2	C1	D1
3	K1		K0		A2	B2	C2	D2
4	K2		K1		A3	B3	NaN	NaN
5	K2		K0		NaN	NaN	C3	D3
"""	

四、交叉表与透视表:

1. 交叉表与透视表什么作用

探究股票的涨跌与星期几有关?

以下图当中表示,week代表星期几,1,0代表这一天股票的涨跌幅是好还是坏,里面的数据代表比例

可以理解为所有时间为星期一等等的数据当中涨跌幅好坏的比例

  • 获取股票的涨跌
  • 星期几
stock_data.head(10)

在这里插入图片描述

# 1. 判断涨跌
np.where(stock_data.p_change>= 0, 1, 0)

""" =>
array([1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0,
       1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0,
       1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,
       0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1,
       1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1,
       1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0,
       1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1,
       0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0,
       1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1,
       0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0,
       1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1,
       0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1,
       0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0,
       1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1,
       1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1,
       1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1,
       1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1,
       0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,
       0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0,
       1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,
       1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0,
       1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0,
       0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1,
       1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0,
       1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1,
       1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1,
       1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
       1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1,
       1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1,
       1, 1, 1, 1, 1])
"""
stock_data['pos_neg'] = np.where(stock_data.p_change >= 0, 1, 0)
stock_data.head()

在这里插入图片描述

# 2. 获星期几
stock_data['weekday'] = pd.to_datetime(stock_data.index).weekday +1
# 对数据根据index排序
stock_data = stock_data.sort_index()
stock_data.head(10)

在这里插入图片描述

2 使用crosstab(交叉表)实现

  • 交叉表:交叉表用于计算一列数据对于另外一列数据的分组个数(寻找两个列之间的关系)
    • pd.crosstab(value1, value2)
    • DataFrame.pivot_table([], index=[])
# 通过交叉表找寻两列数据的关系
ret = pd.crosstab(stock_data.weekday,stock_data.pos_neg)
ret

""" => 
pos_neg	0	1
weekday	
-------------	
1		61	64
2		55	76
3		59	73
4		63	65
5		57	70
"""
#  绘制图形
ret.plot(kind = "bar")

在这里插入图片描述
但是看到count只是每个星期日子的好坏天数,并没有得到比例,该怎么去做?

  • 对于每个星期一等的总天数求和,运用除法运算求出比例;
# 算数运算,先求和
ret.sum(axis=1).astype(np.float32)

# 进行相除操作,得出比例
pro = ret.div(ret.sum(axis=1).astype(np.float32), axis=0)

pro.plot(kind='bar', stacked=True)
plt.show()

在这里插入图片描述

3 使用pivot_table(透视表)实现

使用透视表,刚才的过程更加简单

# 通过透视表,将整个过程变成更简单一些
data.pivot_table(['posi_neg'], index=['week'])

""" =>
pos_neg
weekday	
----------------
1	0.512000
2	0.580153
3	0.553030
4	0.507812
5	0.551181
"""

五、分组与聚合:

分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况

1.什么是分组与聚合:

在这里插入图片描述

2. 分组API

  • DataFrame.groupby(key, as_index=False)
    • key:分组的列数据,可以多个;
col =pd.DataFrame({'color': ['white','red','green','red','green'], 'object': ['pen','pencil','pencil','ashtray','pen'],'price1':[5.56,4.20,1.30,0.56,2.75],'price2':[4.75,4.12,1.60,0.75,3.15]})
col

""" =>
	color	object	price1	price2
---------------------------------------
0	white	pen		5.56	4.75
1	red		pencil	4.20	4.12
2	green	pencil	1.30	1.60
3	red		ashtray	0.56	0.75
4	green	pen		2.75	3.15
"""
# 进行分组,对颜色分组,price进行聚合
group_obj = col.groupby(by='color')
for item in group_obj:
    print(item)
""" =>
('green',    color  object  price1  price2
2  green  pencil    1.30    1.60
4  green     pen    2.75    3.15)
('red',   color   object  price1  price2
1   red   pencil    4.20    4.12
3   red  ashtray    0.56    0.75)
('white',    color object  price1  price2
0  white    pen    5.56    4.75)
"""

group_obj.mean() # 聚合函数只会作用在数值类型的列上面
""" =>
		price1	price2
color		
------------------------
green	2.025	2.375
red		2.380	2.435
white	5.560	4.750
"""

3.星巴克零售店铺数据

现在我们有一组关于全球星巴克店铺的统计数据,如果我想知道美国的星巴克数量和中国的哪个多,或者我想知道中国每个省份星巴克的数量的情况,那么应该怎么办?

数据来源:https://www.kaggle.com/starbucks/store-locations/data

data = pd.read_csv("./directory.csv")
data.head()

在这里插入图片描述

# 进行分组
# 按照国家分组,求出各个国家的星巴克店数量
count = data.groupby(by=["Country"]).count()
count.Brand.head()

""" =>
Country
AD      1
AE    144
AR    108
AT     18
AU     22
Name: Brand, dtype: int64
"""

# 执行绘图操作 
count.Brand.sort_values(ascending=False)[:20].plot(kind='bar',figsize = (20,8))
plt.show()

在这里插入图片描述

# 对比中国各个省份的数据
cn_count = data.groupby(by=["Country","State/Province"]).count()
cn_count.head(20)

在这里插入图片描述

cn_count.loc['CN'].Brand.sort_values(ascending=False)[:20].plot(kind='bar',figsize = (20,8))
plt.show()

在这里插入图片描述

六、综合案例:

1. 需求

现在有一组从2006年到2016年1000部最流行的电影数据,

数据来源:https://www.kaggle.com/damianpanek/sunday-eda/data

  • 问题1:想知道这些电影数据中评分的平均分,导演的人数等信息,应该怎么获取?
  • 问题2:对于这一组电影数据,如果想rating,runtime的分布情况,应该如何呈现数据?
  • 问题3:对于这一组电影数据,如果希望统计电影分类(genre)的情况,应该如何处理数据?

2. 实现:

import pandas as pd
import numpy as np
import matplotlib.pylab as plt

# 获取数据
movie_data = pd.read_csv("./IMDB/IMDB-Movie-Data.csv")
movie_data.head()

在这里插入图片描述
1.想知道这些电影数据中评分的平均分,导演的人数等信息

# 想知道这些电影数据中评分的平均分,导演的人数等信息
mean_score = movie_data.Rating.mean()
mean_score
""" =>
6.723200000000003
"""

# np.unique除数组中的重复数字,并进行排序之后输出。
np.unique(movie_data.Director).shape[0]
""" =>
644
"""

2.对于这一组电影数据,如果我们想rating,runtime的分布情况,应该如何呈现数据

# 对于这一组电影数据,如果我们想rating,runtime的分布情况,应该如何呈现数据
plt.figure(figsize=(20,8), dpi=100)
bins = 30
plt.hist(movie_data.Rating, bins=bins)
# 设置刻度信息
x_ticks = np.linspace(movie_data.Rating.min(), movie_data.Rating.max(),bins+1)
plt.xticks(x_ticks)
plt.grid(linestyle="--",alpha=0.5)
plt.show()

在这里插入图片描述

# 对于这一组电影数据,如果我们想,runtime的分布情况,应该如何呈现数据
plt.figure(figsize=(20,8), dpi=100)
bins = 30
plt.hist(movie_data['Runtime (Minutes)'], bins=bins)
# 设置刻度信息
x_ticks = np.linspace(movie_data['Runtime (Minutes)'].min(), movie_data['Runtime (Minutes)'].max(),bins+1)
plt.xticks(x_ticks)
plt.grid(linestyle="--",alpha=0.5)
plt.show()

在这里插入图片描述
3.对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据

#对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据
# 拿到电影类别需要遍历
class_list = [item.split(',') for item in movie_data.Genre]
class_list

在这里插入图片描述

class_names = [sub_item for item in class_list for sub_item in item]
# 去重
class_names= np.unique(class_names)
class_names
""" =>
array(['Action', 'Adventure', 'Animation', 'Biography', 'Comedy', 'Crime',
       'Drama', 'Family', 'Fantasy', 'History', 'Horror', 'Music',
       'Musical', 'Mystery', 'Romance', 'Sci-Fi', 'Sport', 'Thriller',
       'War', 'Western'], dtype='<U9')
"""

# 创建一个空的df.形状为1000,20
class_names.shape
""" =>
(20,)
"""

values = np.zeros((1000,20))
df = pd.DataFrame(values, columns=class_names, dtype=int)
df.head()

在这里插入图片描述

# 填充df
for i, items in enumerate(class_list):
    for item in items:
        df.ix[i,item] = 1
df.head(10)

在这里插入图片描述

df.sum().sort_values(ascending=False).plot(kind='bar')# 每一列的求和
plt.grid(linestyle='--', alpha=0.5)
plt.show()

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅弋、璃鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值