Python数据分析和数据处理库Pandas(DataFrame数据分析入门)

目录

一.加载数据集

二.查看部分数据

1.通过head()、tail()获取前n行或后n行

2.获取一列或多列数据

三.分组聚合计算

四.基本绘图

五.常用统计值

六.常用排序方法

七.案例:简单数据分析练习


一.加载数据集

使用weather(天气)数据集。其中包含6个字段**(6列)**:

  • date:日期,年-月-日格式。
  • precipitation:降水量。
  • temp_max:最高温度。
  • temp_min:最低温度。
  • wind:风力。
  • weather:天气状况。
python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")
print(type(df))         # 查看df的类型
print("-----------------------")
print(df.shape)         # 查看df的形状
print("-----------------------")
print(df.columns)       # 查看df的列名
print("-----------------------")
print(df.dtypes)        # 查看df各列数据类型
print("-----------------------")
print(df.info())        # 查看df基本信息

运行结果:

pandas与Python常用数据类型对照:

Python 原生类型 pandas 类型 (dtype) 说明
int int64 整数
float float64 浮点数
bool bool 布尔值
str object / string 字符串(pandas 推荐用 string
datetime.datetime datetime64[ns] 日期时间
datetime.timedelta timedelta64[ns] 时间差
list / dict object 任意 Python 对象

二.查看部分数据

1.通过head()、tail()获取前n行或后n行

python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")
print(df.head())
print("-----------------------")
print(df.tail(3))

运行结果:

2.获取一列或多列数据

加载一列数据:

python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")

df_date_series = df["date"]             # 返回的是Series
df_date_dataframe = df[["date"]]        # 返回的是DataFrame

加载多列数据:

python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")

df_multi_columns = df[["date", "temp_max", "wind"]]

按行获取数据:

python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")

df.loc[1]                                                               # 获取行标签为1的数据
df.loc[[1, 10, 100]]                                                    # 获取行标签分别为1、10、100的数据
df.iloc[0]                                                              # 获取行位置为0的数据
df.iloc[-1]                                                             # 获取行位置为最后一位的数据
df.loc[1, "precipitation"]                                              # 获取行标签为1,列标签为precipitation的数据
df.loc[:, "precipitation"]                                              # 获取所有行,列标签为precipitation的数据
df.iloc[:, [3, 5, -1]]                                                  # 获取所有行,列位置为3,5,最后一位的数据
df.iloc[:10, 2:6]                                                       # 获取前10行,列位置为2、3、4、5的数据
df.loc[:10, ["date", "precipitation", "temp_max", "temp_min"]]          # 通过行列标签获取数据

三.分组聚合计算

df.groupby("分组字段")["要聚合的字段"].聚合函数()

df.groupby(["分组字段", "分组字段2", ...])[["要聚合的字段", "要聚合的字段2", ...]].聚合函数()

1.将数据按月分组,并统计最大温度和最小温度的平均值

python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")

df["month"] = pd.to_datetime(df["date"]).dt.to_period("M")                  # 将date转换为 年-月 的格式

groupby_month = df.groupby("month")                                         # 按month分组,返回一个分组对象
temp = groupby_month[["temp_max", "temp_min"]]                              # 从分组对象中选择特定的列
tempMean = temp.mean()                                                      # 对每个列求平均值

# 以上代码可以写在一起
# tempMean = df.groupby("month")[["temp_max", "temp_min"]].mean()
print(tempMean)

部分运行结果:

分组后默认会将分组字段作为行索引。如果分组字段有多个,得到的是复合索引。

2.分组频数计算

统计每个月不同天气状况的数量。

python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")

df["month"] = pd.to_datetime(df["date"]).dt.to_period("M")                  # 将date转换为 年-月 的格式

print(df.groupby("month")["weather"].nunique())

运行结果:

四.基本绘图

**plot():**pandas 提供的绘图方法,它基于 matplotlib 库(需提前安装)。将前面计算得到的均值结果绘制成图表,默认情况下会绘制折线图,其中 "month" 作为 x 轴,"temp_max" 和 "temp_min" 的均值作为 y 轴。

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data/weather.csv")

df["month"] = pd.to_datetime(df["date"]).dt.to_period("M")                  # 将date转换为 年-月 的格式

df.groupby("month")[["temp_max", "temp_min"]].mean().plot()

plt.show()

运行结果:

五.常用统计值

可通过describe()查看常用统计信息。

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data/weather.csv")

print(df.describe())
print("-------------------------------------------------------------")
print(df.describe().T)

运行结果:

可通过include参数指定要统计哪些数据类型的列。

python 复制代码
df.describe(include="all")  # 统计所有列
df.describe(include=["float64"])  # 只统计数据类型为float64的列

六.常用排序方法

nlargest(n, [列名1, 列名2, ... ****]):****按列排序的最大n个

nsmallest(n, [列名1, 列名2, ... ****]):****按列排序的最小n个

sort_values([列名1, 列名2, ... ], asceding=[True, False, ... ****]):****按列升序或降序排序

drop_duplicates ****(subset=[列名1, 列名2]):****按列去重

1.找到最高温度最大的30天

python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")

print(df.nlargest(30, "temp_max"))

部分运行结果:

2.从最高温度最大的30天中找出最低温度最小的5天

python 复制代码
import pandas as pd

df = pd.read_csv("data/weather.csv")

print(df.nlargest(30, "temp_max").nsmallest(5, "temp_min"))

运行结果:

3.找出每年的最高温度

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data/weather.csv")

df["year"] = pd.to_datetime(df["date"]).dt.to_period("Y")                       # 将date转换为 年 格式

sortDf = df.sort_values(["year", "temp_max"], ascending=[True, False])      # 按year升序,temp_max降序排序

print(sortDf.drop_duplicates("year"))                                           # 按year去重

运行结果:

也可以用分组聚合的方式获得结果:

python 复制代码
print(df.groupby("year")[["temp_max"]].max())

七.案例:简单数据分析练习

使用employees(员工)数据集,其中包含10个字段:

  • employee_id:员工id。
  • first_name:员工名称。
  • last_name:员工姓氏。
  • email:员工邮箱。
  • phone_number:员工电话号码。
  • job_id:员工工种。
  • salary:员工薪资。
  • commission_pct:员工佣金比例。
  • manager_id:员工领导的id。
  • department_id:员工的部门id。

以下是我自己的练习代码,部分代码有更好更优的写法。这里我就不一一演示了。

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

# 加载数据
df = pd.read_csv("data/employees.csv")

# 查看数据
# print(df.shape)
# print(df.columns)
# print(df.describe())
# print(df.head())
# df.info()

# 找出薪资最低、最高的员工
# sortSalary = df.sort_values("salary", ascending = True)
# print(sortSalary.iloc[0, :])
# print("----------------------------------------------------")
# print(sortSalary.iloc[-1, :])

# 找出薪资最高的10名员工
# max10Salary = df.sort_values("salary", ascending = False).head(10)
# print(max10Salary[["employee_id", "first_name", "salary"]])

# 查看所有部门id
# print(df[["department_id"]].drop_duplicates())
# print(df["department_id"].unique())

# 查看每个部门的员工数
# print(df.groupby("department_id")["employee_id"].count().rename("employee_count"))

# 绘图
# df.groupby("department_id")["employee_id"].count().rename("employee_count").plot(kind="bar")
# plt.show()

# 薪资的分布
# print(df["salary"].mean())
# print(df["salary"].median())
# print(df["salary"].std())

# 找出平均薪资最高的部门id
print(df.groupby("department_id")["salary"].mean().nlargest(1))
相关推荐
qq_372906932 小时前
Python最短路径怎么求_Dijkstra算法与优先队列结合
jvm·数据库·python
qq_330037992 小时前
如何查看集群版本_crsctl query crs activeversion当前版本
jvm·数据库·python
深度学习lover2 小时前
<数据集>yolo 焊接缺陷识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·焊接缺陷检测
贺小涛2 小时前
python和golang进程、线程、协程区别
java·python·golang
老兵发新帖2 小时前
无人机视角目标检测数据集
人工智能·目标检测·无人机
IT观测2 小时前
数字化转型浪潮下的西安样本:从“摩高互动”看企业级技术服务的破局之道
大数据·人工智能
21439652 小时前
golang如何使用expvar暴露运行时指标_golang expvar运行时指标暴露步骤
jvm·数据库·python
军军君012 小时前
【人工智能/AI】项目实战二:AI视频生成产品汇总(非完全)
图像处理·人工智能·计算机视觉·ai作画·视觉检测·文心一言
weixin_424999362 小时前
如何用SQL按条件计算移动求和_结合CASE与窗口函数
jvm·数据库·python