Pandas中DataFrame数据框的操作
探索和清理数据听起来很无聊,而且不像训练最先进的 AI 模型那么酷。但如果你想成为一名专业的数据科学家,探索性数据分析和数据预处理也是必不可少的技能。幸运的是,有许多很棒的工具可以帮助您了解数据集。著名的 Python 数据处理模块 Pandas 就是其中之一。DataFrame是一个二维的表格数据结构,是pandas库中最重要的数据结构之一。它类似于电子表格或关系型数据库中的表格,可以存储和操作具有不同类型的数据。DataFrame由行索引(也称为标签)和列索引组成,可以看作是一系列Series对象的集合,其中每个Series代表一列数据。每列可以是不同的数据类型,如整数、浮点数、字符串或日期等。DataFrame提供了一系列功能强大的操作和方法,使得数据的清洗、转换、分析和可视化变得更加方便。您可以使用DataFrame来加载、处理和分析结构化的数据,进行数据探索和预处理,以及进行统计分析和建模等任务。
一、DataFrame 的常用操作
# 通过 DataFrame 构造数据框
d = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
print(d)
df = pd.DataFrame(d)
print(df)
# index 修改行名称,columns 修改列名称
df = pd.DataFrame(d, index=['a', 'b', 'c', 'd'], columns=['A', 'B', 'C', 'D'])
print(df)
函数 | values | index | columns | dtypes | size | ndim | shape |
---|---|---|---|---|---|---|---|
返回值 | 元素 | 索引 | 列名 | 类型 | 元素个数 | 维度数 | 数据形状/行列数目 |
# DataFrame 数据框的常用属性
d = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
df = pd.DataFrame(d, index=['a', 'b', 'c', 'd'], columns=['A', 'B', 'C', 'D'])
print(df)
print(df.values)
print(df.index)
print(df.shape)
print(df.dtypes)
二、选取数据框的列或行
DataFrame.loc[行索引名称,列索引名称],如果传入的不是索引名称,那么切片操作将无法执行。
DataFrame.iloc[行索引位置,列索引位置],如果传入的不是索引位置,那么切片操作将无法执行。
loc方法的代码灵活多变,代码的可读性更高;iloc 方法的代码简洁,但可读性不高。
- 使用 loc、iloc 方法实现多列切片,其原理是将多列的列名或者位置作为一个列表或者数据传入。
- 使用 loc、iloc 方法可以取出 DataFrame 中的任意数据。
- 在使用 loc 方法的时候内部传入的行索引名称如果为一个区间,则前后均为闭区间。其内部还可以传入表达式,结果会返回满足表达式的所有值。
- 在使用 loc 方法的时候内部传入的行索引位置或列索引位置为区间时,则为前闭后开区间。
- 使用 loc 方法能够实现所有单层索引切片操作。
# 按照行列顺序进行数据访问
print(df.iloc[0, 0]) # 取出第一行第一列的数据
print(df.iloc[0:3, 0]) # 取出前三行第一列的数据
print(df.iloc[:, 0]) # 取出第一列的数据
print(df.iloc[0, :]) # 取出第一行的数据
print(df.iloc[1:3, 1:3])
三、删除数据框的元素
使用 drop 方法删除 Series 的元素或 DataFrame 的某一行(列)。
DataFrame.drop(labels=None, axis=0, levels=None, inplace=False)
参数名称 | 说明 |
---|---|
labels | 接收 string 或 array。代表删除的行或列的标签。无默认。 |
axis | 接收0或1。代表操作的轴向。默认为0。 |
levels | 接收 int 或者索引名。代表标签所在级别。默认为 None。 |
inplace | 接收 boolean。代表操作是否对原数据生效。默认为 False。 |
d = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
df = pd.DataFrame(d, index=['a', 'b', 'c', 'd'], columns=['A', 'B', 'C', 'D'])
print(df)
print(df.drop('D', axis=1, inplace=False)) # 删除数据框的列元素
print(df.drop(['a', 'c'], axis=0)) # 删除数据框的行元素
四、描述分析数据框数据
Pandas 库基于 Numpy 库,自然也可以用 Numpy 函数对数据框进行描述性统计,Pandas 提供了更加便利的方法来计算均值。
方法名称 | 说明 | 方法名称 | 说明 |
---|---|---|---|
min | 最小值 | max | 最大值 |
mean | 均值 | ptp | 极差 |
median | 中位数 | std | 标准差 |
var | 方差 | cov | 协方差 |
sem | 标准误差 | mode | 众数 |
skew | 样本偏度 | kurt | 样本峰度 |
quantile | 四分位数 | count | 非空值数目 |
describe | 描述统计 | mad | 平均绝对离差 |
describe 方法能够一次性得出数据框所有数值型特征的非空值数目、均值、四分位数、标准差。
import pandas as pd
import numpy as np
d = [[1.0,2.2,3,4],[1,2,3,4],[7,8,9,0],[3,5,7,9]]
df = pd.DataFrame(d, index=['a', 'b', 'c', 'd'], columns=['A', 'B', 'C', 'D'])
print(df)
print(np.mean(df)) # 每一列的均值
print(np.mean(df, axis=1)) # 每一行的均值
print(df.mean(axis=1)) # 每一行的均值
print(df.std()) # 标准差
df.describe() # 按列查看分布情况
五、绘制数据框Plot图
DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False,
sharex=None, sharey=False, layout=None, figsize=None,
use_index=True, title=None, grid=None, legend=True,
style=None, logx=False, logy=False, loglog=False,
xticks=None, yticks=None, xlim=None, ylim=None, rot=None,
fontsize=None, colormap=None, position=0.5, table=False, yerr=None,
xerr=None, stacked=True/False, sort_columns=False,
secondary_y=False, mark_right=True, **kwds)
#参数介绍
x和y:表示标签或者位置,用来指定显示的索引,默认为None
kind:表示绘图的类型,默认为line,折线图
line:折线图
bar/barh:柱状图(条形图),纵向/横向
pie:饼状图
hist:直方图(数值频率分布)
box:箱型图
kde:密度图,主要对柱状图添加Kernel 概率密度线
area:区域图(面积图)
scatter:散点图
hexbin:蜂巢图
ax:子图,可以理解成第二坐标轴,默认None
subplots:是否对列分别作子图,默认False
sharex:共享x轴刻度、标签。如果ax为None,则默认为True,如果传入ax,则默认为False
sharey:共享y轴刻度、标签
layout:子图的行列布局,(rows, columns)
figsize:图形尺寸大小,(width, height)
use_index:用索引做x轴,默认True
title:图形的标题
grid:图形是否有网格,默认None
legend:子图的图例
style:对每列折线图设置线的类型,list or dict
logx:设置x轴刻度是否取对数,默认False
logy
loglog:同时设置x,y轴刻度是否取对数,默认False
xticks:设置x轴刻度值,序列形式(比如列表)
yticks
xlim:设置坐标轴的范围。数值,列表或元组(区间范围)
ylim
rot:轴标签(轴刻度)的显示旋转度数,默认None
fontsize : int, default None#设置轴刻度的字体大小
colormap:设置图的区域颜色
colorbar:柱子颜色
position:柱形图的对齐方式,取值范围[0,1],默认0.5(中间对齐)
table:图下添加表,默认False。若为True,则使用DataFrame中的数据绘制表格
yerr:误差线
xerr
stacked:是否堆积,在折线图和柱状图中默认为False,在区域图中默认为True
sort_columns:对列名称进行排序,默认为False
secondary_y:设置第二个y轴(右辅助y轴),默认为False
mark_right : 当使用secondary_y轴时,在图例中自动用“(right)”标记列标签 ,默认True
x_compat:适配x轴刻度显示,默认为False。设置True可优化时间刻度的显示
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df3 = pd.DataFrame(
{
"a": np.random.randn(1000) + 1,
"b": np.random.randn(1000),
"c": np.random.randn(1000) - 1,
},
columns=["a", "b", "c"],
)
# alpha设置透明度
df3.plot.hist(alpha=0.5)
# 设置坐标轴显示符号
plt.rcParams['axes.unicode_minus'] = False
# 显示图形
plt.show()
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ix3 = pd.MultiIndex.from_arrays([['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'], ['foo', 'foo', 'bar', 'bar', 'foo', 'foo', 'bar', 'bar']], names=['letter', 'word'])
df3 = pd.DataFrame({'data1': [3, 2, 4, 3, 2, 4, 3, 2], 'data2': [6, 5, 7, 5, 4, 5, 6, 5]}, index=ix3)
# 分组
gp3 = df3.groupby(level=('letter', 'word'))
means = gp3.mean()
errors = gp3.std()
means.plot.bar(yerr=errors,rot=0)
plt.show()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!