Python数据分析(3):pandas(中)

简介: Python数据分析(3):pandas

2.5 修改行列标签:columns、index、set_index()


先查看一下数据


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data)


   订单编号   产品  数量    金额
0  d001  投影仪  5台  2000
1  d002  马克笔  5盒   300
2  d003  打印机  1台   298
3  d004  点钞机  1台   349
4  d005  复印纸  2箱   100
5  d006  条码纸  6卷    34


set_index()设置行标签


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.set_index('订单编号'))  #订单编号那一列为行标签


       产品  数量    金额
订单编号               
d001  投影仪  5台  2000
d002  马克笔  5盒   300
d003  打印机  1台   298
d004  点钞机  1台   349
d005  复印纸  2箱   100
d006  条码纸  6卷    34


例:字典一对一修改


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
data = data.rename(columns={'订单编号':'编号', '产品':'产品名称', '数量':'订单数量', '金额':'订单金额'}, 
                   index = {0:'A', 1:'B', 2:'C', 3:'D', 4:'E', 5:'F'})
print(data) 


     编号 产品名称 订单数量  订单金额
A  d001  投影仪   5台  2000
B  d002  马克笔   5盒   300
C  d003  打印机   1台   298
D  d004  点钞机   1台   349
E  d005  复印纸   2箱   100
F  d006  条码纸   6卷    34


columns、index参数分别修改列、行标签


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
data.columns = ['编号', '产品名称', '订单数量', '订单金额']
data.index = ['A', 'B', 'C', 'D', 'E', 'F']
print(data)


     编号 产品名称 订单数量  订单金额
A  d001  投影仪   5台  2000
B  d002  马克笔   5盒   300
C  d003  打印机   1台   298
D  d004  点钞机   1台   349
E  d005  复印纸   2箱   100
F  d006  条码纸   6卷    34


三. pandas进阶


3.1 数据的查找和替换


3.1.1 查找:isin()



import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
print(data)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828


例:isin()函数查看表中是否有该值


data1 = data.isin(['a005','钱包'])   # 查找a005 或 钱包
print(data1)


      编号     产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  False  False     False     False  False  False  False  False
1  False   True     False     False  False  False  False  False
2  False  False     False     False  False  False  False  False
3  False  False     False     False  False  False  False  False
4   True   True     False     False  False  False  False  False
5  False  False     False     False  False  False  False  False
6  False  False     False     False  False  False  False  False


例:查看特定列是否有某值


data2 = data['产品'].isin(['手提包'])
print(data2)


0    False
1    False
2    False
3     True
4    False
5    False
6    False
Name: 产品, dtype: bool


3.1.2 替换:replace()


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace('背包', '挎包')    #并没有替换
print(data)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828


可以看出上述代码并没有替换,那怎么替换呢?


1. 一对一替换


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace('背包', '挎包', inplace = True)  # 加入inplace=True
print(data)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   挎包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   挎包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828


2. 多对一替换


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace(['背包', '手提包'], '挎包', inplace = True)
print(data)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   挎包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   挎包        16        65     23    368   1495   1127
3  a004   挎包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828


3. 多对多替换


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.replace({'背包':'挎包', 16:39, 65:88}, inplace = True)
print(data)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   挎包        39        88     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   挎包        39        88     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a005   钱包        90       187     78   7020  14586   7566
5  a006  单肩包        58       124     63   3654   7812   4158
6  a007  单肩包        58       124     58   3364   7192   3828


3.2 数据的处理


3.2.1 插入:insert()


例:末尾插入一列


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data['品牌'] = ['AM', 'DE', 'SR', 'AM', 'TY', 'DE', 'UD']
print(data)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)  品牌
0  a001   背包        16        65     60    960   3900   2940  AM
1  a002   钱包        90       187     50   4500   9350   4850  DE
2  a003   背包        16        65     23    368   1495   1127  SR
3  a004  手提包        36       147     26    936   3822   2886  AM
4  a005   钱包        90       187     78   7020  14586   7566  TY
5  a006  单肩包        58       124     63   3654   7812   4158  DE
6  a007  单肩包        58       124     58   3364   7192   3828  UD


例:指定插入到哪列


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
data.insert(2, '品牌', ['AM', 'DE', 'SR', 'AM', 'TY', 'DE', 'UD'])
print(data)


     编号   产品  品牌  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   背包  AM        16        65     60    960   3900   2940
1  a002   钱包  DE        90       187     50   4500   9350   4850
2  a003   背包  SR        16        65     23    368   1495   1127
3  a004  手提包  AM        36       147     26    936   3822   2886
4  a005   钱包  TY        90       187     78   7020  14586   7566
5  a006  单肩包  DE        58       124     63   3654   7812   4158
6  a007  单肩包  UD        58       124     58   3364   7192   3828


3.2.2 删除:drop()


axis参数可以指定删除行还是删除列


1. 删除列


例:指定标签删除


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
a = data.drop(['成本价(元/个)', '成本(元)'], axis = 1)
print(a)


     编号   产品  销售价(元/个)  数量(个)  收入(元)  利润(元)
0  a001   背包        65     60   3900   2940
1  a002   钱包       187     50   9350   4850
2  a003   背包        65     23   1495   1127
3  a004  手提包       147     26   3822   2886
4  a005   钱包       187     78  14586   7566
5  a006  单肩包       124     63   7812   4158
6  a007  单肩包       124     58   7192   3828


例:指定索引删除


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
b = data.drop(data.columns[[2, 5]], axis = 1)
print(b)


     编号   产品  销售价(元/个)  数量(个)  收入(元)  利润(元)
0  a001   背包        65     60   3900   2940
1  a002   钱包       187     50   9350   4850
2  a003   背包        65     23   1495   1127
3  a004  手提包       147     26   3822   2886
4  a005   钱包       187     78  14586   7566
5  a006  单肩包       124     63   7812   4158
6  a007  单肩包       124     58   7192   3828


方法三


import pandas as pd
data = pd.read_excel('产品统计表.xlsx')
c = data.drop(columns = ['成本价(元/个)', '成本(元)'])
print(c)


     编号   产品  销售价(元/个)  数量(个)  收入(元)  利润(元)
0  a001   背包        65     60   3900   2940
1  a002   钱包       187     50   9350   4850
2  a003   背包        65     23   1495   1127
3  a004  手提包       147     26   3822   2886
4  a005   钱包       187     78  14586   7566
5  a006  单肩包       124     63   7812   4158
6  a007  单肩包       124     58   7192   3828


2. 删除行


例:指定行标签删除


import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
a = data.drop(['a001', 'a004'], axis = 0)
print(a)


       产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
编号                                                       
a002   钱包        90       187     50   4500   9350   4850
a003   背包        16        65     23    368   1495   1127
a005   钱包        90       187     78   7020  14586   7566
a006  单肩包        58       124     63   3654   7812   4158
a007  单肩包        58       124     58   3364   7192   3828


例:指定索引删除


import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
b = data.drop(data.index[[0, 4]], axis = 0)
print(b)


       产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
编号                                                       
a002   钱包        90       187     50   4500   9350   4850
a003   背包        16        65     23    368   1495   1127
a004  手提包        36       147     26    936   3822   2886
a006  单肩包        58       124     63   3654   7812   4158
a007  单肩包        58       124     58   3364   7192   3828


方法三:


import pandas as pd
data = pd.read_excel('产品统计表.xlsx', index_col = 0)
c = data.drop(index = ['a001', 'a004'])
print(c)


       产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
编号                                                       
a002   钱包        90       187     50   4500   9350   4850
a003   背包        16        65     23    368   1495   1127
a005   钱包        90       187     78   7020  14586   7566
a006  单肩包        58       124     63   3654   7812   4158
a007  单肩包        58       124     58   3364   7192   3828


3.2.3 处理缺失值:isnulll()、dropna()、fillna()


import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
print(data)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)   成本(元)  收入(元)  利润(元)
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
2  a003   背包       NaN        65     23   368.0   1495   1127
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158
6  a007  单肩包      58.0       124     58     NaN   7192   3828


info()函数查看数据类型,还可以查看是否有缺失值


import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
data.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7 entries, 0 to 6
Data columns (total 8 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   编号        7 non-null      object 
 1   产品        7 non-null      object 
 2   成本价(元/个)  6 non-null      float64
 3   销售价(元/个)  7 non-null      int64  
 4   数量(个)     7 non-null      int64  
 5   成本(元)     6 non-null      float64
 6   收入(元)     7 non-null      int64  
 7   利润(元)     7 non-null      int64  
dtypes: float64(2), int64(4), object(2)
memory usage: 576.0+ bytes


1. 查看缺失值:isnull()


isnull()函数查看是否有缺失值;在numpy模块中用isnan()函数


import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
a = data.isnull()
print(a)


      编号     产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  False  False     False     False  False  False  False  False
1  False  False     False     False  False  False  False  False
2  False  False      True     False  False  False  False  False
3  False  False     False     False  False  False  False  False
4  False  False     False     False  False  False  False  False
5  False  False     False     False  False  False  False  False
6  False  False     False     False  False   True  False  False


2. 删除缺失值:dropna()


例:删除有缺失值的行


import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
b = data.dropna()
print(b)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)   成本(元)  收入(元)  利润(元)
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158


例:删除整行都为缺失值的行,需要指定how参数


import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
c = data.dropna(how = 'all')
print(c)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)   成本(元)  收入(元)  利润(元)
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
2  a003   背包       NaN        65     23   368.0   1495   1127
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158
6  a007  单肩包      58.0       124     58     NaN   7192   3828


3. 缺失值的填充:fillna()


import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
d = data.fillna(0)   # 缺失值全部填充为0
print(d)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)   成本(元)  收入(元)  利润(元)
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
2  a003   背包       0.0        65     23   368.0   1495   1127
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158
6  a007  单肩包      58.0       124     58     0.0   7192   3828


例:不同列的缺失值设置不同的填充值


import pandas as pd
data = pd.read_excel('产品统计表1.xlsx')
e = data.fillna({'成本价(元/个)':16, '成本(元)':3364})
print(e)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)   成本(元)  收入(元)  利润(元)
0  a001   背包      16.0        65     60   960.0   3900   2940
1  a002   钱包      90.0       187     50  4500.0   9350   4850
2  a003   背包      16.0        65     23   368.0   1495   1127
3  a004  手提包      36.0       147     26   936.0   3822   2886
4  a005   钱包      90.0       187     78  7020.0  14586   7566
5  a006  单肩包      58.0       124     63  3654.0   7812   4158
6  a007  单肩包      58.0       124     58  3364.0   7192   3828


3.2.4 处理重复值:drop_duplicates()、subset、unique()


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
4  a004  手提包        36       147     26    936   3822   2886   # 重复
5  a005   钱包        90       187     78   7020  14586   7566
6  a006  单肩包        58       124     63   3654   7812   4158


1. 删除重复行:drop_duplicates()


a = data.drop_duplicates()
print(a)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
2  a003   背包        16        65     23    368   1495   1127
3  a004  手提包        36       147     26    936   3822   2886
5  a005   钱包        90       187     78   7020  14586   7566
6  a006  单肩包        58       124     63   3654   7812   4158


2. 删除某一列的重复值:subset


默认保留第一个重复值所在的行,删除其他重复值所在的行


b = data.drop_duplicates(subset = '产品')
print(b)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
3  a004  手提包        36       147     26    936   3822   2886
6  a006  单肩包        58       124     63   3654   7812   4158


保留第一个重复值所在的行


c = data.drop_duplicates(subset = '产品', keep = 'first')
print(c)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
0  a001   背包        16        65     60    960   3900   2940
1  a002   钱包        90       187     50   4500   9350   4850
3  a004  手提包        36       147     26    936   3822   2886
6  a006  单肩包        58       124     63   3654   7812   4158


保留最后一个重复值所在的行


d = data.drop_duplicates(subset = '产品', keep = 'last')
print(d)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
2  a003   背包        16        65     23    368   1495   1127
4  a004  手提包        36       147     26    936   3822   2886
5  a005   钱包        90       187     78   7020  14586   7566
6  a006  单肩包        58       124     63   3654   7812   4158


是重复的就删除


e = data.drop_duplicates(subset = '产品', keep = False)
print(e)


     编号   产品  成本价(元/个)  销售价(元/个)  数量(个)  成本(元)  收入(元)  利润(元)
6  a006  单肩包        58       124     63   3654   7812   4158


3. 获取唯一值:unique()


f = data['产品'].unique()
print(f)


['背包' '钱包' '手提包' '单肩包']
目录
相关文章
|
25天前
|
数据采集 数据可视化 数据挖掘
Pandas数据应用:天气数据分析
本文介绍如何使用 Pandas 进行天气数据分析。Pandas 是一个强大的 Python 数据处理库,适合处理表格型数据。文章涵盖加载天气数据、处理缺失值、转换数据类型、时间序列分析(如滚动平均和重采样)等内容,并解决常见报错如 SettingWithCopyWarning、KeyError 和 TypeError。通过这些方法,帮助用户更好地进行气候趋势预测和决策。
123 71
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
|
2月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【10月更文挑战第42天】本文是一篇技术性文章,旨在为初学者提供一份关于如何使用Python进行数据分析的入门指南。我们将从安装必要的工具开始,然后逐步介绍如何导入数据、处理数据、进行数据可视化以及建立预测模型。本文的目标是帮助读者理解数据分析的基本步骤和方法,并通过实际的代码示例来加深理解。
81 3
|
24天前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
130 73
|
21天前
|
存储 数据采集 数据可视化
Pandas数据应用:医疗数据分析
Pandas是Python中强大的数据操作和分析库,广泛应用于医疗数据分析。本文介绍了使用Pandas进行医疗数据分析的常见问题及解决方案,涵盖数据导入、预处理、清洗、转换、可视化等方面。通过解决文件路径错误、编码不匹配、缺失值处理、异常值识别、分类变量编码等问题,结合Matplotlib等工具实现数据可视化,并提供了解决常见报错的方法。掌握这些技巧可以提高医疗数据分析的效率和准确性。
66 22
|
15天前
|
存储 数据挖掘 数据处理
Python Pandas入门:行与列快速上手与优化技巧
Pandas是Python中强大的数据分析库,广泛应用于数据科学和数据分析领域。本文为初学者介绍Pandas的基本操作,包括安装、创建DataFrame、行与列的操作及优化技巧。通过实例讲解如何选择、添加、删除行与列,并提供链式操作、向量化处理、索引优化等高效使用Pandas的建议,帮助用户在实际工作中更便捷地处理数据。
31 2
|
26天前
|
数据采集 数据可视化 索引
Pandas数据应用:股票数据分析
本文介绍了如何使用Pandas库进行股票数据分析。首先,通过pip安装并导入Pandas库。接着,从本地CSV文件读取股票数据,并解决常见的解析错误。然后,利用head()、info()等函数查看数据基本信息,进行数据清洗,处理缺失值和重复数据。再者,结合Matplotlib和Seaborn进行数据可视化,绘制收盘价折线图。最后,进行时间序列分析,设置日期索引、重采样和计算移动平均线。通过这些步骤,帮助读者掌握Pandas在股票数据分析中的应用。
62 5
|
2月前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
148 4
数据分析的 10 个最佳 Python 库
|
2月前
|
存储 数据可视化 数据挖掘
使用Python进行数据分析和可视化
本文将引导你理解如何使用Python进行数据分析和可视化。我们将从基础的数据结构开始,逐步深入到数据处理和分析的方法,最后通过实际的代码示例来展示如何创建直观的数据可视化。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。让我们一起探索数据的世界,发现隐藏在数字背后的故事!
108 5
|
2月前
|
存储 数据可视化 数据挖掘
Python数据分析项目:抖音短视频达人粉丝增长趋势
Python数据分析项目:抖音短视频达人粉丝增长趋势

热门文章

最新文章