Pandas 数据结构 - DataFrame

DataFrame是一个表格型的数据结构,类似于电子表格或数据库中的表。它由有序的列构成,每一列可以具有不同的数据类型(例如数值、字符串、布尔型值等)。同时,DataFrame也拥有行索引和列索引,使得数据可以按行和列进行标识。

可以将DataFrame视为由多个Series组成的字典,其中每个Series代表一列数据。每个Series共享相同的行索引,通过列索引来区分不同的列。这种结构使得DataFrame能够方便地处理和操作具有不同数据类型和结构的数据集。

使用pandas库中的DataFrame类,我们可以创建、加载、操作和分析复杂的数据集,包括数据清洗、特征选择、聚合计算和可视化等任务。DataFrame提供了灵活而强大的功能,使得数据处理和分析变得更加高效和便捷

DataFrame 特点:

  • 列和行: DataFrame 由多个列组成,每一列都有一个名称,可以看作是一个 Series。同时,DataFrame 有一个行索引,用于标识每一行。

  • 二维结构: DataFrame 是一个二维表格,具有行和列。可以将其视为多个 Series 对象组成的字典。

  • 列的数据类型: 不同的列可以包含不同的数据类型,例如整数、浮点数、字符串

DataFrame 构造方法如下:

pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

  • data:数据,可以是各种形式,如ndarray、series、map、lists、dict等。同时也可以是另一个DataFrame。

  • index:行标签。用于指定行的标签索引,长度必须与数据的行数相匹配,默认为 range(n),n 为数据的行数。

  • columns:列标签。用于指定列的标签索引,长度必须与数据的列数相匹配,默认为 range(n),n 为数据的列数。

  • dtype:数据类型。可选参数,用于强制设定DataFrame的数据类型。默认为None。

  • copy:复制。默认为 False。如果设置为 True,则会复制传入的数据。

Pandas DataFrame 是一个二维的数组结构,类似二维数组。

举例

 使用列表创建:

# 导入pandas库
import pandas as pd

# 创建包含数据的列表
data = [
    ['Alice', 25, 'Engineer'],
    ['Bob', 30, 'Manager'],
    ['Charlie', 35, 'Data Scientist']
]

# 将列表转换为DataFrame对象
df = pd.DataFrame(data)

# 打印DataFrame
print(df)

 也可以使用字典来创建:

# 导入pandas库
import pandas as pd

# 创建包含数据的字典
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Occupation': ['Engineer', 'Manager', 'Data Scientist']
}

# 将字典转换为DataFrame对象
df = pd.DataFrame(data)

# 打印DataFrame
print(df)

使用 ndarrays 创建

# 导入pandas库和numpy库
import pandas as pd
import numpy as np

# 创建包含数据的ndarray
data = np.array([
    ['Alice', 25, 'Engineer'],
    ['Bob', 30, 'Manager'],
    ['Charlie', 35, 'Data Scientist']
])

# 创建DataFrame对象并指定列名和索引
df = pd.DataFrame(data, columns=['Name', 'Age', 'Occupation'], index=['A', 'B', 'C'])

# 打印DataFrame
print(df)

还可以使用字典(key/value),其中字典的 key 为列名:

# 导入pandas库
import pandas as pd

# 创建包含数据的字典
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Occupation': ['Engineer', 'Manager', 'Data Scientist']
}

# 将字典转换为DataFrame对象,并设置字典的key作为列名
df = pd.DataFrame(data)

# 打印DataFrame
print(df)

 

在Pandas中,可以使用 ​loc​属性来返回指定行的数据。如果没有设置索引,那么行的默认索引从0开始递增,第一行的索引为0,第二行的索引为1,以此类推

# 导入pandas库
import pandas as pd

# 创建示例DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Occupation': ['Engineer', 'Manager', 'Data Scientist']
}
df = pd.DataFrame(data)

# 使用loc属性获取第一行的数据
first_row = df.loc[0]
print("第一行的数据:")
print(first_row)

# 使用loc属性获取第二行的数据
second_row = df.loc[1]
print("\n第二行的数据:")
print(second_row)

 

注意:返回结果其实就是一个 Pandas Series 数据。

也可以返回多行数据,使用 [[ ... ]] 格式,... 为各行的索引,以逗号隔开:
# 导入pandas库
import pandas as pd

# 创建示例DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [25, 30, 35, 40, 45],
    'Occupation': ['Engineer', 'Manager', 'Data Scientist', 'Analyst', 'Consultant']
}
df = pd.DataFrame(data)

# 使用loc和[[...]]格式返回多行数据
multiple_rows = df.loc[[0, 2, 4]]
print("多行数据:")
print(multiple_rows)

注意:返回结果其实就是一个 Pandas DataFrame 数据。

 我们可以指定索引值,如下实例:

# 导入pandas库
import pandas as pd

# 创建包含数据的字典
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Occupation': ['Engineer', 'Manager', 'Data Scientist']
}

# 指定索引值
index = ['A', 'B', 'C']

# 将字典、索引值转换为DataFrame对象
df = pd.DataFrame(data, index=index)

# 打印DataFrame
print(df)

Pandas 可以使用 loc 属性返回指定索引对应到某一行:

# 导入pandas库
import pandas as pd

# 创建示例DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Occupation': ['Engineer', 'Manager', 'Data Scientist']
}
index = ['A', 'B', 'C']
df = pd.DataFrame(data, index=index)

# 使用loc属性返回指定索引对应的某一行数据
row_A = df.loc['A']
print("索引为 A 的行数据:")
print(row_A)

 更多 DataFrame 说明

基本操作:
# 获取列
name_column = df['Name']

# 获取行(通过索引位置)
first_row = df.loc['A']

# 选择多列
subset = df[['Name', 'Age']]

# 过滤行
filtered_rows = df[df['Age'] > 30]
属性和方法:
# 导入pandas库
import pandas as pd

# 创建示例DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Occupation': ['Engineer', 'Manager', 'Data Scientist']
}
index = ['A', 'B', 'C']
df = pd.DataFrame(data, index=index)

# 获取列名
columns = df.columns
print("列名:")
print(columns)

# 获取形状(行数和列数)
shape = df.shape
print("\n形状(行数,列数):")
print(shape)

# 获取索引
index = df.index
print("\n索引:")
print(index)

# 获取描述统计信息
stats = df.describe()
print("\n描述统计信息:")
print(stats)

数据操作: 
# 导入pandas库
import pandas as pd

# 创建示例DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Occupation': ['Engineer', 'Manager', 'Data Scientist'],
    'City': ['Beijing', 'Shanghai', 'Guangzhou']
}
index = ['A', 'B', 'C']
df = pd.DataFrame(data, index=index)

# 输出初始的DataFrame
print("初始的DataFrame:")
print(df)

# 添加新列
df['Salary'] = [50000, 60000, 70000]
print("\n添加新列后的DataFrame:")
print(df)

# 删除列
df.drop('City', axis=1, inplace=True)
print("\n删除列后的DataFrame:")
print(df)

# 排序
df.sort_values(by='Age', ascending=False, inplace=True)
print("\n按年龄降序排序后的DataFrame:")
print(df)

# 重命名列
df.rename(columns={'Name': 'Full Name'}, inplace=True)
print("\n重命名 Name 列为 Full Name 后的DataFrame:")
print(df)

从外部数据源创建 DataFrame:
# 创建示例的CSV文件
with open('example.csv', 'w') as f:
    f.write("Name,Age\n")
    f.write("Alice,25\n")
    f.write("Bob,30\n")
# 使用 pandas 创建示例的 Excel 文件
import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'Occupation': ['Engineer', 'Manager', 'Data Scientist'],
        'City': ['Beijing', 'Shanghai', 'Guangzhou']}

df = pd.DataFrame(data)

# 写入数据到 example.xlsx
df.to_excel('example.xlsx', index=False)#,​index=False​ 的含义是将 DataFrame 的索引(行号)写入到 Excel 文件中,因此若不希望将索引写入文件中,应该设置为 ​index=True​
# 导入pandas库
import pandas as pd

# 从CSV文件创建DataFrame
df_csv = pd.read_csv('example.csv')

# 从Excel文件创建DataFrame
df_excel = pd.read_excel('example.xlsx')

# 从字典列表创建DataFrame
data_list = [{'Name': 'Alice', 'Age': 25}, {'Name': 'Bob', 'Age': 30}]
df_from_list = pd.DataFrame(data_list)

print("从CSV文件创建的DataFrame:")
print(df_csv)

print("\n从Excel文件创建的DataFrame:")
print(df_excel)

print("\n从字典列表创建的DataFrame:")
print(df_from_list)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

量子边缘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值