Python数据分析之pandas库的使用详解

本文详细介绍了Python数据分析库pandas的使用,包括pandas的安装、数据类型(Series和DataFrame)、数据读取、数据查询、新增数据列、数据统计函数等内容。通过实例展示了如何创建、查询和操作DataFrame,以及如何读取和处理CSV、TXT、Excel和MySQL数据。此外,还探讨了数据排序、缺失值处理、数据合并、分组统计和日期处理等高级话题。
摘要由CSDN通过智能技术生成

本篇文章所依据是蚂蚁学Python作者讲解所写,且已征求作者的同意,内容基本都是视频中所讲的内容。视频满满的全是干货,也可一边看视频一边配合着本篇文章。

作者的公众号:蚂蚁学Python

作者也提供了代码和课件,在视频的评论区就能找到。本篇文章的代码也可以参考,如有需要,可以私聊发送。
本篇文章有两章没有写完,之后会补充完整。

本篇文章目录

一、前言

Numpy能够帮助我们处理数值型数据,但这是远远不够的,很多时候,我们需要处理的数据中不仅仅时数值型数据,还有字符串,时间序列等等。所以Numpy能够帮助我们处理数值,但是pandas除了梳理数值之外(基于Numpy),还能构帮助我们处理其他类型的数据。

二、什么是pandas

一个开源的python类库:用于数据分析、数据处理、数据可视化

  • 特点:高性能,容易使用的数据结构,容易使用的数据分析工具

三、pandas安装

pip install pandas

四、pandas的常用数据类型

4.1 series:表示一维,带标签数组,一行或一列

4.1.1创建series

示例代码:

import pandas as pd

# 创建一个Series
t = pd.Series([1, 2, 'p', 3, 'a'])
# 输出的结果,左侧为索引,右侧为数据
print(t)
输出结果:
0    1
1    2
2    p
3    3
4    a
dtype: object

4.1.2 打印索引值

通过index则可以打印出索引值
示例代码:

import pandas as pd

# 创建一个Series
t = pd.Series([1, 2, 'p', 3, 'a'])
# 打印索引值
print(t.index)
输出结果:
RangeIndex(start=0, stop=5, step=1)

4.1.3 打印数据值

通过values可以获得我们数据值
示例代码:

import pandas as pd

# 创建一个Series
t = pd.Series([1, 2, 'p', 3, 'a'])
# 打印数据值
print(t.values)
输出结果:
[1 2 'p' 3 'a']

4.1.3 创建一个具有标签索引的series

指定index则会创建一个具有标签索引的serie
示例代码:

import pandas as pd

#  创建一个具有标签索引的series
f = pd.Series([1, 2, 'p', 3, 'a'], index=[11, 22, 33, 44, 55])
print(f)
输出结果:
11    1
22    2
33    p
44    3
55    a
dtype: object

4.1.4 使用python字典创建series

示例代码:

import pandas as pd

data = {
   "name": "tom", "gender": "man", "age": 18}
g = pd.Series(data)
print(g)
输出结果:
name      tom
gender    man
age        18
dtype: object

4.1.5 根据索引值查询数据

  • 查询单个数据与字典查询数据类似方法
    示例代码:
import pandas as pd

f = pd.Series([1, 2, 'p', 3, 'a'], index=[11, 22, 33, 44, 55])
# 使用索引值查询数据
print(f[11])
输出结果:
1
  • 查询多个数据
    示例代码:
import pandas as pd

f = pd.Series([1, 2, 'p', 3, 'a'], index=[11, 22, 33, 44, 55])
# 使用索引值查询多个数据
print(f[[11, 22]])
输出结果:
11    1
22    2
dtype: object

4.2 DataFrame:表示二维,多行多列

DataFrame是一个表格型的数据结构

  • 每列可以是不同值的类型(数值,字符串,布尔值等)
  • 既有行索引index,也有列索引columns
  • 可以被看做由Series组成的字典

4.2.1DataFrame创建

4.2.1.1 根据字典创建DataFrame

示例代码:

import pandas as pd

# 根据字典创建DataFrame
data = {
   
    "name": ["Tom", "rose", "json"],
    "age": [12, 21, 23],
    "gender": ["man", "woman", "man"]
}
# 调用DataFrame方法
df = pd.DataFrame(data)
print(df)
输出结果:
   name  age gender
0   Tom   12    man
1  rose   21  woman
2  json   23    man
4.2.1.2 查看类型

调用dtypes方法可查看我们的数据每一列的数据类型
示例代码:

import pandas as pd

# 根据字典创建DataFrame
data = {
   
    "name": ["Tom", "rose", "json"],
    "age": [12, 21, 23],
    "gender": ["man", "woman", "man"]
}
# 调用DataFrame方法
df = pd.DataFrame(data)
print(df.dtypes)
输出如果:
name      object
age        int64
gender    object
dtype: object
4.2.1.3 查看列索引

通过columns方法可以查看我们数据的列索引
示例代码:

import pandas as pd

# 根据字典创建DataFrame
data = {
   
    "name": ["Tom", "rose", "json"],
    "age": [12, 21, 23],
    "gender": ["man", "woman", "man"]
}
# 调用DataFrame方法
df = pd.DataFrame(data)
print(df.columns)
输出结果:
Index(['name', 'age', 'gender'], dtype='object')
4.2.1.4 查看行索引

通过index方法可以查看我们数据的列索引

import pandas as pd

# 根据字典创建DataFrame
data = {
   
    "name": ["Tom", "rose", "json"],
    "age": [12, 21, 23],
    "gender": ["man", "woman", "man"]
}
# 调用DataFrame方法
df = pd.DataFrame(data)
print(df.index)
输出结果:
RangeIndex(start=0, stop=3, step=1)

4.2.2 从DataFrame中查询Series

  • 如果只查询一行、一列、返回的是pd.Series
  • 如果查询多行、多列,返回的是pd.DataFrame
4.2.2.1 查询一列,结果是一个pd.Series

示例代码:

import pandas as pd

# 根据字典创建DataFrame
data = {
   
    "name": ["Tom", "rose", "json"],
    "age": [12, 21, 23],
    "gender": ["man", "woman", "man"]
}
# 调用DataFrame方法
df = pd.DataFrame(data)
print(df)
输出结果:
   name  age gender
0   Tom   12    man
1  rose   21  woman
2  json   23    man
print(df["name"])
输出结果:
0     Tom
1    rose
2    json
Name: name, dtype: object
4.2.2.2 查询多列,结果是一个pd.DataFrame

示例代码:

import pandas as pd

# 根据字典创建DataFrame
data = {
   
    "name": ["Tom", "rose", "json"],
    "age": [12, 21, 23],
    "gender": ["man", "woman", "man"]
}
# 调用DataFrame方法
df = pd.DataFrame(data)
print(df)
输出结果:
   name  age gender
0   Tom   12    man
1  rose   21  woman
2  json   23    man
print(df[["name","age"]])
输出结果:
   name  age
0   Tom   12
1  rose   21
2  json   23
print(type(df[["name","age"]]))
输出结果“
<class 'pandas.core.frame.DataFrame'>
4.2.2.3 查询一行,结果是一个pd.Series

示例代码:

import pandas as pd

# 根据字典创建DataFrame
data = {
   
    "name": ["Tom", "rose", "json"],
    "age": [12, 21, 23],
    "gender": ["man", "woman", "man"]
}
# 调用DataFrame方法
df = pd.DataFrame(data)
print(df)
输出结果:
   name  age gender
0   Tom   12    man
1  rose   21  woman
2  json   23    man
# 查询一行
print(df.loc[1])
输出结果:
name       rose
age          21
gender    woman
Name: 1, dtype: object
4.2.2.4 查询多行,结果是一个pd.DataFrame

示例代码:

import pandas as pd

# 根据字典创建DataFrame
data = {
   
    "name": ["Tom", "rose", "json"],
    "age": [12, 21, 23],
    "gender": ["man", "woman", "man"]
}
# 调用DataFrame方法
df = pd.DataFrame(data)
print(df)
输出结果:
   name  age gender
0   Tom   12    man
1  rose   21  woman
2  json   23    man
# 查询多行
print(df.loc[0:1])
输出结果:
   name  age gender
0   Tom   12    man
1  rose   21  woman

五、数据的读取

5.1 常用数据格式读取方式

在这里插入图片描述

5.2 pandas读取csv文件

pandas读取csv文件通过调用read_csv即可。

5.2.1 读取整篇文件

示例代码:

import pandas as pd

t = pd.read_csv("proxy.csv")
print(t)

5.2.2 pandas读取前几行

通过head()方法,可以读取csv文件中的前几行内容。
示例代码:

import pandas as pd

t = pd.read_csv("proxy.csv")
print(t.head())

输出结果:
在这里插入图片描述

5.2.3 pandas查看数据的形状,返回(行数、列数)

通过.shape方法,可查看csv文件的形状。
示例代码:

import pandas as pd

t = pd.read_csv("proxy.csv")
print(t.shape)
输出结果:
(9999, 1)

5.2.4 pandas查看列名列表

import pandas as pd

t = pd.read_csv("proxy.csv")
# 查看列名列表
print(t.columns)
输出结果:
Index(['http://106.122.205.38:8118'], dtype='object')

5.2.5 pandas查看索引列

import pandas as pd

t = pd.read_csv("proxy.csv")
# 查看索引列
print(t.index)
输出结果:
RangeIndex(start=0, stop=9999, step=1)

5.2.6 pandas查看数据类型

import pandas as pd

t = pd.read_csv("proxy.csv")
# 查看数据类型
print(t.dtypes)
输出结果:
http://106.122.205.38:8118    object
dtype: object

5.3 pandas读取txt文件

5.4 pandas读取excel文件

示例代码:

import pandas as pd

f = pd.read_excel("pandas数据读取.xlsx")
print(f)

输出结果:
在这里插入图片描述

5.5 pandas读取mysql文件

六、数据的查询

6.1 pandas查询数据的几种方式

  • df.loc方法,根据行、列的标签值查询
  • df.iloc方法,根据行、列的数字位置进行查询
  • df.where方法
  • df.query方法
    .loc方法既能查询,又能覆盖写入

6.2 pandas使用loc查询数据

  • 使用单个标签值查询数据
  • 使用值列表批量查询
  • 使用数值区间进行范围查询
  • 使用条件表达式查询
  • 调用函数查询
    注意:以上查询方法,既适合行也适合列。注意观察降维DataFrame > Series > 值

6.2.1 使用单个Label值查询数据

行或者列,都可以只传入单个值,实现精确匹配
查询单个值:

import pandas as pd

df = pd.read_csv("weather.csv", encoding="gbk")
# 设置以年月日为索引
df.set_index("ymd", inplace=True)
# 将℃替换为空
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype("int32")
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype("int32")
# 打印前几行
print(df.head())
输出结果:
          bWendu  yWendu tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
ymd                                                                    
2020/3/1      13       5   多云~晴       东北风     2722
2020/3/2      10       1~多云       东南风     2712
2020/3/3      14       1~晴       东北风     2632
2020/3/4      15       2     多云       东北风     2862
2020/3/5      16       6     多云       东南风     2802
# 查询单个值
single = df.loc["2020/3/1", "bWendu"]
print(single)
输出结果:
13

得到一个Series:

import pandas as pd

df = pd.read_csv("weather.csv", encoding="gbk")
# 设置以年月日为索引
df.set_index("ymd", inplace=True)
# 将℃替换为空
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype("int32")
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype("int32")
# 打印前几行
print(df.head())
输出结果:
          bWendu  yWendu tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
ymd                                                                    
2020/3/1      13       5   多云~晴       东北风     2722
2020/3/2      10       1~多云       东南风     2712
2020/3/3      14       1~晴       东北风     2632
2020/3/4      15       2     多云       东北风     2862
2020/3/5      16       6     多云       东南风     2802
# 得到一个Series
series = df.loc["2020/3/4", ["bWendu", "yWendu"]]
print(series)
输出结果:
bWendu    15
yWendu     2
Name: 2020/3/4, dtype: object

6.2.2 使用值列表批量查询数据

得到一个Series,通过传入一行多列或者多行一列即可得到Series

import pandas as pd

df = pd.read_csv("weather.csv", encoding="gbk")
# 设置以年月日为索引
df.set_index("ymd", inplace=True)
# 将℃替换为空
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype("int32")
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype("int32")
# 打印前几行
print(df.head())
输出结果:
          bWendu  yWendu tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
ymd                                                                    
2020/3/1      13       5   多云~晴       东北风     2722
2020/3/2      10       1~多云       东南风     2712
2020/3/3      14       1~晴       东北风     2632
2020/3/4      15       2     多云       东北风     2862
2020/3/5      16       6     多云       东南风     2802
# 得到一个Series,通过传入一行多列或者多行一列即可得到Series
ser = df.loc[['2020/3/1', '2020/3/2', '2020/3/3'], 'bWendu']
print(ser)
输出结果:
ymd
2020/3/1    13
2020/3/2    10
2020/3/3    14
Name: bWendu, dtype: int32

得到一个DataFrame,通过行和列都传入一个列表即可得到一个DataFrame

import pandas as pd

df = pd.read_csv("weather.csv", encoding="gbk")
# 设置以年月日为索引
df.set_index("ymd", inplace=True)
# 将℃替换为空
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype("int32")
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype("int32")
# 打印前几行
print(df.head())
输出结果:
          bWendu  yWendu tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
ymd                                                                    
2020/3/1      13       5   多云~晴       东北风     2722
2020/3/2      10       1~多云       东南风     2712
2020/3/3      14       1~晴       东北风     2632
2020/3/4      15       2     多云       东北风     2862
2020/3/5      16       6     多云       东南风     2802
# 得到一个DataFrame,通过行和列都传入一个列表即可得到一个DataFrame
data = df.loc[['2020/3/1', '2020/3/2', '2020/3/3'],['bWendu', 'yWendu']]
print(data)

6.2.3 使用数值区间进行范围查询数据

注意:区间既包括开始,也包括结束
行index按区间,Series类型

import pandas as pd

df = pd.read_csv("weather.csv", encoding="gbk")
# 设置以年月日为索引
df.set_index("ymd", inplace=True)
# 将℃替换为空
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype("int32")
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype("int32")
# 打印前几行
print(df.head())
输出结果:
          bWendu  yWendu tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
ymd                                                                    
2020/3/1      13       5   多云~晴       东北风     2722
2020/3/2      10       1~多云       东南风     2712
2020/3/3      14       1~晴       东北风     2632
2020/3/4      15       2     多云       东北风     2862
2020/3/5      16       6     多云       东南风     2802
# 行index按区间
num = df.loc['2020/3/1':'2020/3/2', 'bWendu']
print(num)
输出结果:
ymd
2020/3/1    13
2020/3/2    10
Name: bWendu, dtype: int32

列index按区间,Series类型

import pandas as pd

df = pd.read_csv("weather.csv", encoding="gbk")
# 设置以年月日为索引
df.set_index("ymd", inplace=True)
# 将℃替换为空
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype("int32")
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype("int32")
# 打印前几行
print(df.head())
输出结果:
          bWendu  yWendu tianqi fengxiang fengli  aqi aqiInfo  aqiLevel
ymd                                                                    
2020/3/1      13       5   多云~晴       东北风     2722
2020/
  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值