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

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

二. pandas入门


2.1 数据结构


pandas有两个重要的数据结构对象:Series和DataFrame


2.1.1 Series对象


Series是创建一个一维数组对象,会自动生成行标签


import pandas as pd
s = pd.Series(['短裤', '毛衣', '连衣裙', '牛仔裤'])
print(s)


0     短裤
1     毛衣
2    连衣裙
3    牛仔裤
dtype: object


index参数可以指定行标签


import pandas as pd
s1 = pd.Series(['短裤', '毛衣', '连衣裙', '牛仔裤'], index = ['a001', 'a002', 'a003', 'a004']) # 添加行标签
print(s1)


a001     短裤
a002     毛衣
a003    连衣裙
a004    牛仔裤
dtype: object


使用Series对象还可以基于字典创建数据


import pandas as pd
s2 = pd.Series({'a001':'短裤', 'a002':'毛衣', 'a003':'连衣裙', 'a004':'牛仔裤'})
print(s2)


a001     短裤
a002     毛衣
a003    连衣裙
a004    牛仔裤
dtype: object


2.1.2 DataFrame对象


会自动生成行列标签


import pandas as pd
df = pd.DataFrame([['短裤', 45], ['毛衣', 69], ['连衣裙', 119], ['牛仔裤', 99]])
print(df)


     0    1
0   短裤   45
1   毛衣   69
2  连衣裙  119
3  牛仔裤   99


可以columns参数指定列标签;index参数指定行标签


import pandas as pd
df1 = pd.DataFrame([['短裤', 45], ['毛衣', 69], ['连衣裙', 119], ['牛仔裤', 99]], 
                   columns=['产品', '单价'], index=['a001', 'a002', 'a003', 'a004'])
print(df1)


       产品   单价
a001   短裤   45
a002   毛衣   69
a003  连衣裙  119
a004  牛仔裤   99


例:也可以用字典形式生成数据


import pandas as pd
df3 = pd.DataFrame({'产品':['短裤', '毛衣', '连衣裙', '牛仔裤'],'单价':[45, 69, 119, 99]})
print(df3)


    产品   单价
0   短裤   45
1   毛衣   69
2  连衣裙  119
3  牛仔裤   99


例:在用字典生成数据的基础上,同时指定行标签


import pandas as pd
df3 = pd.DataFrame({'产品':['短裤', '毛衣', '连衣裙', '牛仔裤'],'单价':[45, 69, 119, 99]}, index = ['a001', 'a002', 'a003', 'a004'])
print(df3)


       产品   单价
a001   短裤   45
a002   毛衣   69
a003  连衣裙  119
a004  牛仔裤   99


2.2 读取数据


2.2.1 读取Excel:read_excel()


1. 读取特定工作簿:sheet_name


例如对下表的数据进行读取



4月是第四个表,我们应把sheet_name参数指定为3;因为索引是从0开始的。


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


可以看出read_excel()函数自动创建了一个DataFrame对象,同时自动把第一行数据当做列标签。


2. 指定列标签:header


可以看出不给出header参数时,该参数默认为0。


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, header=0)
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


header=1时结果如下:


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


   d001  投影仪  5台  2000
0  d002  马克笔  5盒   300
1  d003  打印机  1台   298
2  d004  点钞机  1台   349
3  d005  复印纸  2箱   100
4  d006  条码纸  6卷    34


header=None时结果如下:


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


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


3. 指定行标签:index_col


该参数默认为None


index_col=0时,第0列为列标签


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


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


index_col=1时


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


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


4. 读取指定列:usecols


usecols=[2]:指定第二列


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


   数量
0  5台
1  5盒
2  1台
3  1台
4  2箱
5  6卷


指定多列


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


    产品    金额
0  投影仪  2000
1  马克笔   300
2  打印机   298
3  点钞机   349
4  复印纸   100
5  条码纸    34


2.2.2 读取csv:read_csv()



import pandas as pd
data = pd.read_csv('订单表.csv')
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


nrows参数可以指定显示的行数


import pandas as pd
data = pd.read_csv('订单表.csv', nrows=3)  # 显示三行
print(data)


   订单编号   产品  数量    金额
0  d001  投影仪  5台  2000
1  d002  马克笔  5盒   300
2  d003  打印机  1台   298


2.3 查看数据的行数和列数


2.3.1 查看前几行:head()


head()函数中参数为空默认前5行


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


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


例:指定head(3)时如下


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


   订单编号   产品  数量    金额
0  d001  投影仪  5台  2000
1  d002  马克笔  5盒   300
2  d003  打印机  1台   298


2.3.2 查看行数和列数:shape


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


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


2.3.3 查看数据的类型:info()、dtype、astype()


1. info()函数


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


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   订单编号    6 non-null      object
 1   产品      6 non-null      object
 2   数量      6 non-null      object
 3   金额      6 non-null      int64 
dtypes: int64(1), object(3)
memory usage: 320.0+ bytes
None


2. dtype参数


例:查看特定列的书库类型


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3)
print(data['金额'].dtype)


int64


3. astype()函数


例:特定列的数据类型转换


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name = 3)
data['金额'] = data['金额'].astype('float64')
print(data)
print(data['金额'].dtype)


   订单编号   产品  数量      金额
0  d001  投影仪  5台  2000.0
1  d002  马克笔  5盒   300.0
2  d003  打印机  1台   298.0
3  d004  点钞机  1台   349.0
4  d005  复印纸  2箱   100.0
5  d006  条码纸  6卷    34.0
float64


2.4 选择数据


2.4.1 选择行:loc()、iloc()


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)  #index_col指定行标签
print(data)


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


1. 挑选单行


loc()函数加行标签指定行


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.loc['d001'])


产品     投影仪
数量      5台
金额    2000
Name: d001, dtype: object


iloc()函数加索引指定行号


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[2])


产品    打印机
数量     1台
金额    298
Name: d003, dtype: object


2. 挑选多行


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.loc[['d002', 'd004']])


       产品  数量   金额
订单编号              
d002  马克笔  5盒  300
d004  点钞机  1台  349


iloc()挑选:


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[[1, 5]])  # 1,5


       产品  数量   金额
订单编号              
d002  马克笔  5盒  300
d006  条码纸  6卷   34
       产品  数量   金额


或者给出区间


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
print(data.iloc[1:5])  #1-5


       产品  数量   金额
订单编号              
d002  马克笔  5盒  300
d003  打印机  1台  298
d004  点钞机  1台  349
d005  复印纸  2箱  100


3. 挑选满足条件的行


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
a = data['金额'] < 300   #挑选金额>300的行
print(data[a])


       产品  数量   金额
订单编号              
d003  打印机  1台  298
d005  复印纸  2箱  100
d006  条码纸  6卷   34


2.4.2 选择列数据:iloc()


1. 挑选单列


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


0    投影仪
1    马克笔
2    打印机
3    点钞机
4    复印纸
5    条码纸
Name: 产品, dtype: object


2. 挑选多列


例:通过列标签挑选多列


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data[['产品', '金额']])


    产品    金额
0  投影仪  2000
1  马克笔   300
2  打印机   298
3  点钞机   349
4  复印纸   100
5  条码纸    34


例:通过索引挑选多列


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.iloc[:, [1,3]])


    产品    金额
0  投影仪  2000
1  马克笔   300
2  打印机   298
3  点钞机   349
4  复印纸   100
5  条码纸    34


或者写成区间


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3)
print(data.iloc[:, 1:3])  # 左闭右开


    产品  数量
0  投影仪  5台
1  马克笔  5盒
2  打印机  1台
3  点钞机  1台
4  复印纸  2箱
5  条码纸  6卷


2.4.3 同时选择行列数据


例:通过标签挑选


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
data1 = data.loc[['d001', 'd005'], ['产品', '金额']]
print(data1)


       产品    金额
订单编号           
d001  投影仪  2000
d005  复印纸   100


例:通过索引挑选


import pandas as pd
data = pd.read_excel('订单表.xlsx', sheet_name=3, index_col=0)
data2 = data.iloc[[2, 4], [0, 2]]
print(data2)


       产品   金额
订单编号          
d003  打印机  298
d005  复印纸  100
相关文章
|
20小时前
|
数据可视化 数据挖掘 BI
【Python】—— pandas 数据分析
【Python】—— pandas 数据分析
7 1
|
3天前
|
数据采集 数据可视化 数据挖掘
如何利用Python中的Pandas库进行数据分析和可视化
Python的Pandas库是一种功能强大的工具,可以用于数据分析和处理。本文将介绍如何使用Pandas库进行数据分析和可视化,包括数据导入、清洗、转换以及基本的统计分析和图表绘制。通过学习本文,读者将能够掌握利用Python中的Pandas库进行高效数据处理和可视化的技能。
|
3天前
|
数据采集 数据可视化 数据挖掘
【新手解答】Python中Pandas的初学者笔记
【新手解答】Python中Pandas的初学者笔记
4 0
|
5天前
|
机器学习/深度学习 数据可视化 算法
使用Python进行数据分析的5个必备技巧
【5月更文挑战第9天】本文介绍了Python数据分析的五个关键技巧:1) 使用Pandas进行数据处理和清洗;2) 利用NumPy进行高效数值计算;3) 通过Matplotlib和Seaborn创建可视化图表;4) 使用Scikit-learn执行机器学习任务;5) 在Jupyter Notebook中进行交互式分析和文档分享。这些技巧能提升数据分析的效率和准确性。
|
6天前
|
数据采集 数据可视化 数据挖掘
Python 与 PySpark数据分析实战指南:解锁数据洞见
Python 与 PySpark数据分析实战指南:解锁数据洞见
|
7天前
|
存储 JavaScript 前端开发
Python网络数据抓取(5):Pandas
Python网络数据抓取(5):Pandas
28 8
|
8天前
|
机器学习/深度学习 运维 算法
Python数据分析中的异常检测与处理方法
在Python数据分析中,异常数据是一个常见但又十分重要的问题。本文将介绍几种常见的异常检测与处理方法,包括基于统计学方法、机器学习方法以及深度学习方法。通过对异常数据的有效检测与处理,可以提高数据分析的准确性和可信度,从而更好地指导业务决策。
|
8天前
|
数据采集 数据可视化 数据挖掘
Python在数据分析中的强大应用
【5月更文挑战第5天】Python在数据驱动时代成为数据分析师首选工具,得益于其丰富的数据科学库(如NumPy、Pandas、Matplotlib、Seaborn和SciPy)。这些库支持数据清洗、探索、建模和可视化。Python在数据清洗、文本分析、Web数据抓取和大数据处理等方面有广泛应用,并因其易学性、强大社区和广泛适用性而备受青睐。未来,Python在数据分析领域的角色将更加重要。
|
21天前
|
机器学习/深度学习 数据可视化 数据挖掘
Python跳水:探索数据分析的深渊
Python跳水:探索数据分析的深渊
22 0
|
15天前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告