Pandas 数据结构——DataFrame

目录

一、认识DataFrame

1.1 简介

1.2 DataFrame特点

1.3  表格对象组成部分

二、创建DataFrame

2.1 DataFrame构造方法

2.2 创建DataFrame对象

2.2.1 通过Series对象创建

2.2.2 使用字典列表创建

2.2.3 通过Numpy创建

三、DataFrame 的属性和方法

3.1访问 DataFrame 元素

3.2 修改DataFrame

3.3 删除DataFrame元素

3.4 DataFrame 的统计分析

3.5 DataFrame 的索引操作

3.6 DataFrame 的布尔索引

3.7 DataFrame 的数据类型

3.8 DataFrame 的合并与分割

3.9 索引和切片

四、注意事项


一、认识DataFrame

1.1 简介

       DataFrame 是 Pandas 中的另一个核心数据结构,用于表示二维表格型数据。

        DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。

        DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

        DataFrame 提供了各种功能来进行数据访问、筛选、分割、合并、重塑、聚合以及转换等操作。

1.2 DataFrame特点

  1. 二维结构
    • DataFrame是一个二维表格,类似于Excel电子表格或SQL表,具有行和列。
    • 可以被看作由多个Series(一维数组)组成的字典,其中每个Series代表一列数据。
  2. 数据类型多样性
    • 不同的列可以包含不同的数据类型,如整数、浮点数、字符串或Python对象等。
  3. 索引
    • DataFrame拥有行索引(通常是整数或日期)和列索引(可以是任意字符串)。
    • 通过行和列的标签,可以进行灵活的索引和切片操作。
  4. 大小可变
    • 可以添加和删除列,类似于Python中的字典。
  5. 自动对齐
    • 在进行算术运算或数据对齐操作时,DataFrame会自动对齐索引。
  6. 处理缺失数据
    • DataFrame可以包含缺失数据,Pandas使用NaN(Not a Number)来表示。
    • 提供了方便的方法来处理缺失值,如dropna()删除包含缺失值的行或列,fillna()填充缺失值。
  7. 数据操作
    • 支持丰富的数据操作方法,如数据切片、索引、子集分割、合并、重塑、聚合以及转换等。
    • 提供了.loc、.iloc和.query()等方法来灵活地访问和筛选数据。
  8. 时间序列支持
    • 对时间序列数据有特别的支持,可以轻松地进行时间数据的切片、索引和操作。
  9. 数据可视化
    • 虽然DataFrame本身不是可视化工具,但它可以与Matplotlib或Seaborn等可视化库结合使用,进行数据可视化。
  10. 高效的数据输入输出
    • 可以方便地读取和写入数据,支持多种格式,如CSV、Excel、SQL数据库和HDF5格式。
  11. 描述性统计
    • 提供了一系列方法来计算描述性统计数据,如.describe()、.mean()、.sum()等。
  12. 支持多级索引
    • 可以在行和列上使用多个标签进行索引,以更复杂的方式组织和访问数据。

1.3  表格对象组成部分

表格对象的主要组成部分有三个:

  1. 数据(values)
  2. 索引(index)
  3. 列名称(columns)

二、创建DataFrame

2.1 DataFrame构造方法

DataFrame构造方法如下:

pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

参数说明:

  • data:DataFrame 的数据部分,可以是字典、二维数组、Series、DataFrame 或其他可转换为 DataFrame 的对象。如果不提供此参数,则创建一个空的 DataFrame。
  • index:DataFrame 的行索引,用于标识每行数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
  • columns:DataFrame 的列索引,用于标识每列数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
  • dtype:指定 DataFrame 的数据类型。可以是 NumPy 的数据类型,例如 np.int64、np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。
  • copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。

2.2 创建DataFrame对象

2.2.1 通过Series对象创建

#1、通过单个Series对象创建。DataFrame是一组Series对象的集合,可以用单个Series创建一个单列的DataFrame
import pandas as pd
import numpy as np
#先创建一个Series对象
df1 = pd.Series({'California': 423967, 'Texas': 695662,
                  'New York': 141297, 'Florida': 170312,
                  'Illinois': 149995})
#创建单列的DataFrame对象
pd.DataFrame(df1,columns=['area'])

运行效果如下:

#2、通过多个Series对象的字典创建DataFrame对象
#另外创建一个Series对象
df2 = pd.Series({'California': 38332521, 'Texas': 26448193,
                 'New York': 19651127, 'Florida': 19552860,
                 'Illinois': 12882135})
#使用字Series对象字典方式创建DataFrame对象
pd.DataFrame({'area':df1, 'population':df2})

运行效果如下:

2.2.2 使用字典列表创建

#所有元素都是字典的列表可以变成DataFrame
#创建一个元素为字典的列表
df3 = [{'a':i, 'b': 2*i} for i in range(10)]
#通过字典列表创建DataFrame
pd.DataFrame(df3)

运行效果如下:

2.2.3 通过Numpy创建

#假入有一个二维数组,就可以创建一个可以指定行列索引值的DataFrame
#创建一个numpy二维数组
np.random.seed(0)
a =np.random.randint(1,10,(3,2))
#基于a数组建立DataFrame
pd.DataFrame(a,columns=['foo', 'bar'],index=['a','b', 'c'])

#输出如下:
   foo  bar
a    6    1
b    4    4
c    8    4

#假如不指定行列索引,那么行列默认都是整数索引值
pd.DataFrame(a)

#输出如下:
   0  1
0  6  1
1  4  4
2  8  4

三、DataFrame 的属性和方法

DataFrame 对象有许多属性和方法,用于数据操作、索引和处理,例如:shape、columns、index、head()、tail()、info()、describe()、mean()、sum() 等。

# DataFrame 的属性和方法
print(df.shape)     # 形状
print(df.columns)   # 列名
print(df.index)     # 索引
print(df.head())    # 前几行数据,默认是前 5 行
print(df.tail())    # 后几行数据,默认是后 5 行
print(df.info())    # 数据信息
print(df.describe())# 描述统计信息
print(df.mean())    # 求平均值
print(df.sum())     # 求和

3.1访问 DataFrame 元素

访问列:使用列名作为属性或通过 .loc[]、.iloc[] 访问,也可以使用标签或位置索引。

# 通过列名访问
print(df['Column1'])

# 通过属性访问
print(df.Name)     
   
# 通过 .loc[] 访问
print(df.loc[:, 'Column1'])

# 通过 .iloc[] 访问
print(df.iloc[:, 0])  # 假设 'Column1' 是第一列

# 访问单个元素
print(df['Name'][0])

访问行:使用行的标签和 .loc[] 访问。

# 通过行标签访问
print(df.loc[0, 'Column1'])

3.2 修改DataFrame

修改列数据:直接对列进行赋值。

df['Column1'] = [10, 11, 12]

添加新列:给新列赋值。

df['NewColumn'] = [100, 200, 300]

添加新行:使用 loc、append 或 concat 方法

# 使用 loc 为特定索引添加新行
df.loc[3] = [13, 14, 15, 16]

# 使用 append 添加新行到末尾
new_row = {'Column1': 13, 'Column2': 14, 'NewColumn': 16}
df = df.append(new_row, ignore_index=True)

concat() 方法用于合并两个或多个 DataFrame,当你想要添加一行到另一个 DataFrame 时,可以将新行作为一个新的 DataFrame,然后使用 concat()

# 使用concat添加新行
new_row = pd.DataFrame([[4, 7]], columns=['A', 'B'])  # 创建一个只包含新行的DataFrame
df = pd.concat([df, new_row], ignore_index=True)  # 将新行添加到原始DataFrame

print(df)

3.3 删除DataFrame元素

df_dropped = df.drop('Column1', axis=1)
df_dropped = df.drop(0)  # 删除索引为 0 的行

3.4 DataFrame 的统计分析

描述性统计:使用 .describe() 查看数值列的统计摘要。

df.describe()

计算统计数据:使用聚合函数如 .sum()、.mean()、.max() 等。

df['Column1'].sum()
df.mean()

3.5 DataFrame 的索引操作

重置索引:使用 .reset_index()。

df_reset = df.reset_index(drop=True)

设置索引:使用 .set_index()。

df_set = df.set_index('Column1')

3.6 DataFrame 的布尔索引

使用布尔表达式:根据条件过滤 DataFrame。

df[df['Column1'] > 2]

3.7 DataFrame 的数据类型

查看数据类型:使用 dtypes 属性。

df.dtypes

转换数据类型:使用 astype 方法。

df['Column1'] = df['Column1'].astype('float64')

3.8 DataFrame 的合并与分割

合并:使用 concat 或 merge 方法。

# 纵向合并
pd.concat([df1, df2], ignore_index=True)

# 横向合并
pd.merge(df1, df2, on='Column1')

分割:使用 pivot、melt 或自定义函数。

# 长格式转宽格式
df_pivot = df.pivot(index='Column1', columns='Column2', values='Column3')

# 宽格式转长格式
df_melt = df.melt(id_vars='Column1', value_vars=['Column2', 'Column3'])

3.9 索引和切片

DataFrame 支持对行和列进行索引和切片操作。

# 索引和切片
print(df[['Name', 'Age']])  # 提取多列
print(df[1:3])               # 切片行
print(df.loc[:, 'Name'])     # 提取单列
print(df.loc[1:2, ['Name', 'Age']])  # 标签索引提取指定行列
print(df.iloc[:, 1:])        # 位置索引提取指定列

四、注意事项

  • DataFrame 是一种灵活的数据结构,可以容纳不同数据类型的列。
  • 列名和行索引可以是字符串、整数等。
  • DataFrame 可以通过多种方式进行数据选择、过滤、修改和分析。
  • 通过对 DataFrame 的操作,可以进行数据清洗、转换、分析和可视化等工作。
  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas是一个开源的Python数据分析库,提供了多种数据结构,其中包括DataFrame和Panel。DataFramepandas中最常用的数据结构之一,它是一个二维的数据结构,数据以行和列的表格方式排列,可以执行各种行列操作和算术运算。通过pandasDataFrame构造函数,我们可以创建一个DataFrame对象,传入数据、索引、列名等参数来构建DataFrame对象。 另外,pandas还提供了Panel这个数据结构,它是一个三维的数据结构,可以看作是DataFrame的容器,可以存储多个DataFrame。通过pandas的Panel构造函数,我们可以创建一个空的Panel对象,也可以传入数据、items、major_axis、minor_axis等参数来构建一个具有数据的Panel对象。 对于DataFrame,我们可以指定索引和列名来创建一个具有特定结构的DataFrame。在创建DataFrame时,如果给定的索引和列名的长度与数据的维度不匹配,将会报错。例如,在给定的数据列表中,如果每个内层列表的长度与列名的长度不一致,将会报错。 综上所述,pandas提供了多种数据结构,包括DataFrame和Panel,它们可以用于对数据进行分析和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Pandas数据结构分析](https://blog.csdn.net/m0_58387972/article/details/123302776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python3快速入门(十三)——Pandas数据结构](https://blog.csdn.net/cdqvkn73338/article/details/100959261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值