首页 > 编程语言 >Python进阶入门之DataFrame

Python进阶入门之DataFrame

时间:2024-07-08 21:31:03浏览次数:19  
标签:Salary 进阶 Python Age df1 DataFrame print Name

引言

接上一篇《关于Python中的series详解与应用》。本篇将详细介绍DataFrame,主要包括它的定义、创建方法、常用操作、应用场景以及与其他数据结构的比较。

什么是DataFrame

DataFrame是Pandas库中的一种二维标签数据结构,可以看作是一种带有行和列标签的表格数据。它既有行索引,也有列索引,每列可以是不同的数据类型。DataFrame类似于电子表格或SQL表格,非常适合用于数据分析和处理。

创建DataFrame

可以通过多种方式创建DataFrame,常见的方法包括使用字典、列表、Numpy数组或读取文件。

import pandas as pd
import numpy as np

# 使用字典创建DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Salary': [50000, 60000, 70000]
}
df1 = pd.DataFrame(data)
print(df1)
print("*" * 20, "分隔符", "*" * 20)

# 使用列表创建DataFrame
data = [
    ['Alice', 25, 50000],
    ['Bob', 30, 60000],
    ['Charlie', 35, 70000]
]
df2 = pd.DataFrame(data, columns=['Name', 'Age', 'Salary'])
print(df2)
print("*" * 20, "分隔符", "*" * 20)

# 使用Numpy数组创建DataFrame
data = np.array([
    ['Alice', 25, 50000],
    ['Bob', 30, 60000],
    ['Charlie', 35, 70000]
])
df3 = pd.DataFrame(data, columns=['Name', 'Age', 'Salary'])
print(df3)
print("*" * 20, "分隔符", "*" * 20)
# 读取CSV文件创建DataFrame
# df4 = pd.read_csv('data.csv')#读者自行选择文件读取
# print(df4)

 上述代码运行结果如下:

      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000
******************** 分隔符 ********************
      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000
******************** 分隔符 ********************
      Name Age Salary
0    Alice  25  50000
1      Bob  30  60000
2  Charlie  35  70000

DataFrame的常用操作

访问和修改数据

可以通过行标签和列标签访问和修改DataFrame中的数据。


# 访问数据
print(df1['Name'])  # 访问单列
print(df1[['Name', 'Age']])  # 访问多列
print(df1.loc[0])  # loc 使用行和列的标签来进行访问。例如,df1.loc[0] 表示访问标签为 0 的那一行
print("*" * 20, "分隔符", "*" * 20)
print(df1.iloc[0])  # iloc 使用行和列的整数位置来进行访问。例如,df1.iloc[0] 表示访问第0行(第一行)
print("*" * 20, "分隔符", "*" * 20)
# 修改数据
df1.at[0, 'Age'] = 26  # 将索引为0的那一行年龄更改为26
df1.loc[1, 'Salary'] = 65000 # 将索引为1的那一行工资更改为65000
print(df1)

 上述代码运行结果为:

0      Alice
1        Bob
2    Charlie
Name: Name, dtype: object
      Name  Age
0    Alice   25
1      Bob   30
2  Charlie   35
Name      Alice
Age          25
Salary    50000
Name: 0, dtype: object
Name      Alice
Age          25
Salary    50000
Name: 0, dtype: object
******************** 分隔符 ********************
      Name  Age  Salary
0    Alice   26   50000
1      Bob   30   65000
2  Charlie   35   70000
添加和删除数据

可以轻松地添加和删除行或列。

# 添加列
df1['Bonus'] = [5000, 6000, 7000]
print(df1)
print("*" * 20, "分隔符", "*" * 20)

# 删除列
df1.drop('Bonus', axis=1, inplace=True)
print(df1)
print("*" * 20, "分隔符", "*" * 20)

# 添加行
new_row = pd.Series(['David', 40, 80000], index=['Name', 'Age', 'Salary'])
df1 = df1.append(new_row, ignore_index=True)  # 在Pandas 1.4.0及更高版本中,DataFrame.append() 方法已被弃用
df1 = pd.concat([df1, new_row.to_frame().T], ignore_index=True)
print(df1)
print("*" * 20, "分隔符", "*" * 20)

# 删除行
df1.drop(3, axis=0, inplace=True)
print(df1)

上述代码运行结果如下:

      Name  Age  Salary  Bonus
0    Alice   25   50000   5000
1      Bob   30   60000   6000
2  Charlie   35   70000   7000
******************** 分隔符 ********************
      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000
******************** 分隔符 ********************
      Name Age Salary
0    Alice  25  50000
1      Bob  30  60000
2  Charlie  35  70000
3    David  40  80000
******************** 分隔符 ********************
      Name Age Salary
0    Alice  25  50000
1      Bob  30  60000
2  Charlie  35  70000

关于有关参数解释:

axis

axis 参数用于指定要删除的是行还是列:

  • axis=0:表示沿行方向操作,即删除行。行索引在0轴上,因此设置axis=0
  • axis=1:表示沿列方向操作,即删除列。列索引在1轴上,因此设置axis=1

示例:

# 删除行索引为3的行
df1.drop(3, axis=0, inplace=True)

# 删除列名为'Bonus'的列
df1.drop('Bonus', axis=1, inplace=True)
inplace

inplace 参数用于指定操作是否在原DataFrame上进行修改。如果设置为 True,则会直接修改原DataFrame;如果设置为 False(默认值),则会返回一个新的DataFrame,原DataFrame保持不变。

示例:

# 在原DataFrame上删除行索引为3的行
df1.drop(3, axis=0, inplace=True)

# 返回一个删除了行索引为3的新DataFrame,原DataFrame不变
new_df = df1.drop(3, axis=0, inplace=False)
基本统计操作

DataFrame提供了丰富的统计函数,如求和、均值、最大值、最小值等。

print(df1.sum())  # 所有列的和
print(df1.mean())  # 所有列的均值
print(df1.max())  # 所有列的最大值
print(df1.min())  # 所有列的最小值

关于求均值时,可能会遇到 不是数值型数据,故此可通过下述方法进行更正:


# 创建一个示例DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Salary': [50000, 60000, 70000]
}
df1 = pd.DataFrame(data)

# 输出原DataFrame
print("原DataFrame:")
print(df1)

# 选择数值类型的列
numeric_df = df1.select_dtypes(include=[float, int])
'''
select_dtypes 方法
select_dtypes 是Pandas中用于选择特定数据类型列的方法。它可以根据数据类型筛选出DataFrame中的列。
include 参数
include 参数指定了要选择的列的数据类型。在这个例子中,include=[float, int] 表示选择所有数据类型为浮点数 (float) 和整数 (int) 的列
'''

# 计算数值类型列的均值
mean_values = numeric_df.mean()

# 输出均值
print("\n数值类型列的均值:")
print(mean_values)

上述代码运行结果如下:

原DataFrame:
      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000

数值类型列的均值:
Age          30.0
Salary    60000.0
dtype: float64
过滤和条件操作

可以使用条件语句对DataFrame进行过滤操作。

# 过滤年龄大于30的行
filtered_df = df1[df1['Age'] > 30],
print(filtered_df)
''' 
其中关于df1['Age'] > 30返回的类型如下
0    False
1    False
2    True
Name: Age, dtype: bool
'''
缺失值处理

DataFrame可以处理缺失值(NaN),并提供了相关的函数来检测和处理这些值。

# 创建一个DataFrame的副本
df_with_nan = df1.copy()

# 将第二行(索引为1)的'Age'列值设为NaN(缺失值)
df_with_nan.at[1, 'Age'] = np.nan

# 检测DataFrame中的缺失值,返回一个布尔类型的DataFrame
print(df_with_nan.isna())
print("*" * 20, "分隔符", "*" * 20)

# 填充DataFrame中的缺失值,用0代替所有NaN
filled_df = df_with_nan.fillna(0)
print(filled_df)
print("*" * 20, "分隔符", "*" * 20)

# 删除包含缺失值的行
dropped_df = df_with_nan.dropna()
print(dropped_df)

上述代码运行结果如下:

Name    Age  Salary
0  False  False   False
1  False   True   False
2  False  False   False
******************** 分隔符 ********************
      Name   Age  Salary
0    Alice  25.0   50000
1      Bob   0.0   60000
2  Charlie  35.0   70000
******************** 分隔符 ********************
      Name   Age  Salary
0    Alice  25.0   50000
2  Charlie  35.0   70000

DataFrame的应用场景

数据分析与处理

DataFrame非常适合进行数据分析和处理,包括数据清洗、数据转换和特征工程等。

# 数据描述
print(df1.describe())
print("*" * 20, "分隔符", "*" * 20)

# 数据分组和聚合
grouped = df1.groupby('Age').sum()
print(grouped)
print("*" * 20, "分隔符", "*" * 20)

# 数据透视表
pivot_table = df1.pivot_table(values='Salary', index='Name', columns='Age')
print(pivot_table)

上述代码运行结果如下:

    Age   Salary
count   3.0      3.0
mean   30.0  60000.0
std     5.0  10000.0
min    25.0  50000.0
25%    27.5  55000.0
50%    30.0  60000.0
75%    32.5  65000.0
max    35.0  70000.0
******************** 分隔符 ********************
        Name  Salary
Age                 
25     Alice   50000
30       Bob   60000
35   Charlie   70000
******************** 分隔符 ********************
Age           25       30       35
Name                              
Alice    50000.0      NaN      NaN
Bob          NaN  60000.0      NaN
Charlie      NaN      NaN  70000.0
数据可视化

可以结合可视化库如Matplotlib或Seaborn进行数据可视化。

# 创建画布并分割成1行3列的子图
fig, axs = plt.subplots(1, 3, figsize=(18, 5))

# 简单折线图
df1.plot(x='Name', y='Salary', kind='line', ax=axs[0])
axs[0].set_title('Simple Line Plot')

# 条形图
df1.plot(x='Name', y='Salary', kind='bar', ax=axs[1])
axs[1].set_title('Bar Plot')

# 使用Seaborn绘制分布图
sns.histplot(df1['Salary'], ax=axs[2])
axs[2].set_title('Salary Distribution')

# 调整子图间距
plt.tight_layout()

# 显示图形
plt.show()

数据导入和导出

DataFrame可以轻松地从多种数据源导入数据,也可以将数据导出到不同的文件格式。

# 导出到CSV文件
df1.to_csv('output.csv', index=False)

# 导出到Excel文件
df1.to_excel('output.xlsx', index=False)

DataFrame与其他数据结构的比较

  • 与Series:Series是一维的,DataFrame是二维的。DataFrame的每一列都是一个Series。
  • 与Numpy数组:DataFrame基于Numpy数组构建,但提供了更多的功能,如标签、缺失值处理等。
  • 与字典:DataFrame可以看作是一个由Series组成的字典,每个Series代表DataFrame的一列。

结论

DataFrame是Pandas中非常重要的数据结构,提供了丰富的功能和方法,适合处理二维数据。无论是在数据分析、数据清洗还是数据可视化中,DataFrame都能够提供极大的便利。希望通过这篇总结,能够为读者以及自己能够更好地理解和应用DataFrame,更好的在实际学习与工作中应用。

标签:Salary,进阶,Python,Age,df1,DataFrame,print,Name
From: https://blog.csdn.net/qq_67696694/article/details/140277826

相关文章

  • 关于Python中的series详解与应用
    引言近期在学习Python的过程中学到了Pandas库,它是数据处理操作中一款非常强大且流行的工具。而Pandas的两个核心数据结构是Series和DataFrame(下一篇文章便会进行有关学习)。本篇将详细介绍Series,主要包括它的定义、创建方法、常用操作、应用场景以及与其他数据结构的比较,仅为......
  • Python数据结构详解:列表、字典、集合与元组的使用技巧
    前言哈喽,大家好!今天我要和大家分享的是关于Python中最常用的数据结构:列表、字典、集合和元组的使用技巧。你有没有遇到过在处理数据时,不知道该用哪种数据结构来存储和操作数据的情况呢?别担心,今天这篇文章就来帮你搞定这些问题,让你在数据处理上更加得心应手。最后,别忘了关......
  • 用python一个集mes和erp在企业微信协同的服务案例
    要使用Python实现一个集MES和ERP于一体的企业微信协同服务案例,我们可以利用企业微信的API和第三方库`wechatpy`。以下是一个简单的实现思路:1.首先,安装`wechatpy`库,用于实现企业微信的相关功能。```pipinstallwechatpy```2.创建一个`WeChatService`类,用于实现企业微信......
  • python 自动化神器 多平台纯代码RPA办公自动化python框架
    ​ Pyaibote是一款专注于纯代码RPA(机器人流程自动化)的强大工具,支持Android、Browser和Windows三大主流平台。无论您需要自动化安卓应用、浏览器操作还是Windows应用程序,Pyaibote都能轻松应对Pyaibote可以同时协作Windows、Web和Android平台机器人,满足您多样化的办公自动化需求......
  • GLFLS课程:线段树进阶
    线段树合并与分裂线段树合并两个权值线段树\(T_1\)和\(T_2\)的合并是一个递归的过程。我们不妨设要合并的子树为\(x\)和\(y\),其对应区间均为\([l,\r]\)那么分类讨论如下:  \((1)\)首先若\(x=0\)或\(y=0\),则\(x\),\(y\)中有空节点,直接返回\(x+y\)即可......
  • Python面试题-8
    41.请解释Python中的切片操作。在Python中,切片(Slicing)是一种获取序列(如字符串、列表、元组等)的子集或部分的操作。切片操作使用方括号[],并且可以在方括号中指定开始索引、结束索引和步长。其基本语法如下:sequence[start:end:step]start是切片开始的索引,默认为0(序列的......
  • python+flask计算机毕业设计个性化图书借阅系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,图书馆作为知识传播与学术研究的重要基地,其服务模式正经历着深刻的变革。传统的图书借阅方式已难以满足读者日益增......
  • python+flask计算机毕业设计个性化电子书籍商城系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和数字阅读习惯的普及,电子书籍已成为现代人获取知识、享受阅读乐趣的重要方式。然而,当前市场上的电子书籍商城大多......
  • python+flask计算机毕业设计个人相册管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着数字技术的飞速发展,个人照片已成为记录生活点滴、珍藏美好回忆的重要载体。然而,随着照片数量的急剧增加,如何高效、有序地管理这些珍贵......
  • 解码Python字符串:拯救失落的字符世界!
    一、字符串的定义在Python中,字符串可以用单引号('')或双引号("")括起来定义。例如:s='HelloWorld!'print(s)输出:HelloWorld!你还可以使用三重引号('''或""")来定义多行字符串。但大多数时候三重引号用来注释文档例如:s='''HelloWorld!''&#......