pandas DataFrame数据结构

Pandas是Python中一个非常流行的数据处理库,用于处理结构化数据,如表格数据。在Pandas中,DataFrame是最常用的数据结构之一。它提供了许多强大的功能,可以帮助您轻松地进行数据操作和数据分析。在本文中,我们将深入探讨Pandas DataFrame数据结构的细节,以便更好地了解和使用它

DataFrame是什么?

DataFrame是一种二维标签数据结构,可以将其视为电子表格或SQL表。它由行和列组成,并且可以容纳各种类型的数据。您可以将其视为一组Series对象,每个Series对象都共享相同的索引。

在Pandas中,您可以使用各种方法来创建DataFrame。最常用的方法是使用字典、列表、numpy数组、CSV文件和数据库查询等数据源。以下是使用字典创建DataFrame的示例

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
        'age': [25, 32, 18, 47],
        'gender': ['F', 'M', 'M', 'M']}
df = pd.DataFrame(data)

在这个例子中,我们创建了一个由三个键值对组成的字典。每个键值对表示一个列,其中键是列名称,值是列数据。我们将这个字典传递给DataFrame构造函数,它将自动创建一个DataFrame对象。这个DataFrame对象有四行,每一行对应一个人的信息,列名称为name、age和gender。

DataFrame的属性

一旦创建了DataFrame,您就可以使用许多属性来访问其元数据。以下是一些最常用的属性:

  • shape:DataFrame的形状,即行数和列数。
  • columns:DataFrame的列名称。
  • index:DataFrame的行索引。
  • values:DataFrame的值,以二维numpy数组的形式返回。
  • dtypes:DataFrame的数据类型,以Series的形式返回。

以下是一些示例代码,说明如何使用这些属性:

print(df.shape)    # (4, 3)
print(df.columns)  # Index(['name', 'age', 'gender'], dtype='object')
print(df.index)    # RangeIndex(start=0, stop=4, step=1)
print(df.values)   # array([['Alice', 25, 'F'],
                   #        ['Bob', 32, 'M'],
                   #        ['Charlie', 18, 'M'],
                   #        ['David', 47, 'M']], dtype=object)
print(df.dtypes)   # name      object
                   # age        int64
                   # gender    object
                   # dtype: object

DataFrame的基本操作

DataFrame支持许多操作,包括选择、筛选、排序和分组等。以下是一些示例代码,演示如何使用这些操作:

选择列

您可以使用列名称或列索引选择单个列或多个列

print(df['name'])            # 选择单个列
print(df[['name', 'age']])   # 选择多个列
print(df.iloc[:, 1:])        # 使用位置索引选择列
         # 
选择行

您可以使用行索引或位置索引选择单个行或多个行:

print(df.loc[0])             # 选择单个行
print(df.loc[[0, 2]])        # 选择多个行
print(df.iloc[0])            # 使用位置索引选择单个行
print(df.iloc[[0, 2]])       # 使用位置索引选择多个行

筛选行

您可以使用布尔条件筛选行

print(df[df['age'] > 30])    # 筛选年龄大于30的人

排序

您可以按照一列或多列排序:

print(df.sort_values('age'))  # 按年龄升序排序
print(df.sort_values(['gender', 'age']))  # 按性别和年龄升序排序
分组

您可以按照一列或多列进行分组,并对每个组进行聚合操作:

print(df.groupby('gender').mean())    # 按性别分组并计算每组的平均年龄

DataFrame的数据操作

在Pandas中,DataFrame支持许多数据操作,如索引、切片、替换和重塑等。以下是一些示例代码,演示如何使用这些操作:

设置索引

您可以使用一列或多列设置行索引

df.set_index('name', inplace=True)  # 使用名字设置行索引
print(df)

重置索引

您可以将索引重置为默认的整数索引:

df.reset_index(inplace=True)        # 重置行索引
print(df)
选择行和列

您可以同时选择行和列,并使用它们的交叉区域:

print(df.loc[df['age'] > 30, ['name', 'gender']])  # 筛选年龄大于30的人,并选择名字和性别列

切片

您可以使用行和列的位置索引进行切片:

print(df.iloc[1:3, 0:2])  # 选择第2到3行和第1到2列

替换值

您可以使用替换函数将DataFrame中的值替换为其他值

df.replace({'F': 0, 'M': 1}, inplace=True)  # 将F替换为0,将M替换为1
print(df)

重塑

您可以使用reshape函数将DataFrame从宽格式转换为长格式,或从长格式转换为宽格式:

long_df = df.melt(id_vars='name', value_vars=['age', 'gender'], var_name='variable', value_name='value')  # 从宽格式转换

为了更好地说明如何使用Pandas DataFrame,下面将演示如何使用一个实际数据集进行数据操作和分析

一个例子:数据分析

在这个例子中,我们将使用一个名为Iris的数据集。这个数据集包含150个鸢尾花的测量值,其中每个样本包含4个特征和一个目标变量。这些特征是萼片长度、萼片宽度、花瓣长度和花瓣宽度,目标变量是鸢尾花的种类,其中有三种:山鸢尾、变色鸢尾和维吉尼亚鸢尾。

导入数据

首先,我们需要导入数据。这个数据集可以从Pandas的GitHub页面下载。下载后,我们可以使用pandas.read_csv()函数将数据集加载到DataFrame中

import pandas as pd

# 加载数据集
url = 'https://raw.githubusercontent.com/pandas-dev/pandas/master/doc/data/iris.data'
df = pd.read_csv(url, names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])

# 查看前5行数据
print(df.head())

输出结果如下:

   sepal_length  sepal_width  petal_length  petal_width        class
0           5.1          3.5           1.4          0.2  Iris-setosa
1           4.9          3.0           1.4          0.2  Iris-setosa
2           4.7          3.2           1.3          0.2  Iris-setosa
3           4.6          3.1           1.5          0.2  Iris-setosa
4           5.0          3.6           1.4          0.2  Iris-setosa

数据摘要

为了了解数据集的基本情况,我们可以计算一些统计量,如均值、中位数、标准差等。Pandas提供了DataFrame.describe()函数,可以计算这些统计量:

# 计算统计量
print(df.describe())

输出结果如下:

       sepal_length  sepal_width  petal_length  petal_width
count    150.000000   150.000000    150.000000   150.000000
mean       5.843333     3.054000      3.758667     1.198667
std        0.828066     0.433594      1.764420     0.763161
min        4.300000     2.000000      1.000000     0.100000
25%        5.100000     2.800000      1.600000     0.300000
50%        5.800000     3.000000      4.350000     1.300000
75%        6.400000     3.300000      5.100000     1.800000
max       

上面的输出结果显示,数据集中有150个样本。萼片长度、萼片宽度、花瓣长度和花瓣宽度的平均值分别为5.84、3.05、3.76和1.20。最小值、最大值、中位数和标准差等也被计算出来。

数据可视化

除了计算统计量,我们还可以使用Pandas和Matplotlib库进行数据可视化。下面的代码展示了如何使用Pandas和Matplotlib绘制鸢尾花的花瓣长度和花瓣宽度的散点图:

import matplotlib.pyplot as plt

# 绘制散点图
plt.scatter(df['petal_length'], df['petal_width'])

# 设置标题和标签
plt.title('Petal length vs. Petal width')
plt.xlabel('Petal length')
plt.ylabel('Petal width')

# 显示图形
plt.show()

运行上述代码将显示一个散点图,横坐标是花瓣长度,纵坐标是花瓣宽度。

数据操作

Pandas DataFrame提供了许多函数来对数据进行操作。下面是一些常用的数据操作:

切片和索引
切片和索引是操作DataFrame中数据的基本方法。可以使用DataFrame.loc[]和DataFrame.iloc[]函数来进行切片和索引。DataFrame.loc[]使用标签来索引行和列,而DataFrame.iloc[]使用整数位置来索引行和列。

下面的代码展示了如何使用切片和索引来选择数据:

# 选择前10个样本的所有特征
print(df.iloc[:10, :])

# 选择所有样本的萼片长度和萼片宽度
print(df.loc[:, ['sepal_length', 'sepal_width']])

# 选择花瓣长度大于1.5的所有样本
print(df[df['petal_length'] > 1.5]

转置
使用DataFrame.transpose()函数可以将DataFrame进行转置。转置后的DataFrame中,行变成了列,列变成了行。

下面的代码展示了如何使用转置函数:

# 转置DataFrame
print(df.transpose())

分组
使用DataFrame.groupby()函数可以对DataFrame中的数据进行分组。可以使用一列或多列进行分组,然后对每个组进行聚合操作,如计算平均值、中位数等。

下面的代码展示了如何对鸢尾花数据集进行分组:

# 按类别对数据进行分组
grouped = df.groupby('class')

# 计算每个组的平均值
print(grouped.mean())

总结

本文介绍了Pandas DataFrame数据结构的基本概念和用法。我们了解了如何创建、操作和分析DataFrame中的数据。Pandas DataFrame是一种非常有用的数据结构,它可以帮

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

资料小助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值