[人工智能自学] Python包学习-pandas

紧接上篇numpy的学习教程

本篇参考:
Pandas 教程|菜鸟教程
官方教程 - 10分钟入门pandas¶
joyful-pandas
pandas中文教程

它建立在 NumPy 库的基础之上,提供了高效的数据结构和数据分析工具,使得在 Python 中进行数据操作变得更加容易和高效。

Pandas 提供了丰富的功能,包括:

数据清洗:处理缺失数据、重复数据等。

数据转换:改变数据的形状、结构或格式。

数据分析:进行统计分析、聚合、分组等。

数据可视化:通过整合 Matplotlib 和 Seaborn 等库,可以进行数据可视化。

核心数据结构

Series(一维数据结构)

存储不同类型的数据,如整数、浮点数、字符串等。它由一组数据和与之相关的索引组成。索引默认是从 0 开始的整数序列,但也可以自定义。

python 复制代码
s = pd.Series([1,3,5,np.nan,6,8])

0 1.0

1 3.0

2 5.0

3 NaN

4 6.0

5 8.0

dtype: float64

数据访问:

可以通过索引来访问 Series 中的元素。例如,要获取 'City B' 的人口数量,可以使用population'City B',它会返回 200000。

DataFrame(二维数据结构)

类似于电子表格或者 SQL 表。它是一个二维表格,由行索引、列索引和数据组成。每列的数据类型可以不同。

python 复制代码
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Math': [90, 80, 70],
        'English': [85, 75, 90]}
df = pd.DataFrame(data)

例子2:

python 复制代码
df2 = pd.DataFrame({ 'A' : 1.,
                     'B' : pd.Timestamp('20130102'),
                     'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                     'D' : np.array([3] * 4,dtype='int32'),
                     'E' : pd.Categorical(["test","train","test","train"]),
                     'F' : 'foo' })

可以通过列名来访问列数据,如df'Math'会返回包含数学成绩的 Series。也可以通过loc(基于标签的索引)和iloc(基于整数位置的索引)来访问行和列。例如,df.loc0, 'Name'会返回第一行(索引为 0)的 'Name' 列的值,即 'Alice';df.iloc1, 2会返回第二行(索引为 1)第三列(索引为 2)的值,即 90。

两个series可以拼接成1个dataFrame

series和dataframe的关系:

python 复制代码
import pandas as pd

# 创建两个Series对象
series_apples = pd.Series([1, 3, 7, 4])
series_bananas = pd.Series([2, 6, 3, 5])

# 将两个Series对象相加,得到DataFrame,并指定列名
df = pd.DataFrame({ 'Apples': series_apples, 'Bananas': series_bananas })

# 显示DataFrame
print(df)

数据读取和写入

读取数据

读取多种格式的数据,如 CSV、Excel、SQL 数据库等。

以读取 CSV 文件为例,使用read_csv函数。假设我们有一个名为 'data.csv' 的文件,其中包含一些数据:

python 复制代码
df = pd.read_csv('data.csv')

从 CSV 文件读取数据并加载为 DataFrame

filepath_or_buffer (路径或文件对象),sep (分隔符),header (行标题),names (自定义列名),dtype (数据类型),index_col (索引列)

写入数据

可以将 DataFrame 的数据写入到各种格式的文件中。例如,要将 DataFrame 写入到 CSV 文件,可以使用to_csv函数:

python 复制代码
df.to_csv('new_data.csv', index=False)

index=False表示不将行索引写入文件。如果要写入 Excel 文件,可以使用to_excel函数。

数据处理

head()

head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。

python 复制代码
df = pd.read_csv('nba.csv')
python 复制代码
import pandas as pd

df = pd.read_csv('nba.csv')

print(df.head(10))

tail()

tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN。

info()

返回表格的一些基本信息:

python 复制代码
import pandas as pd

df = pd.read_csv('nba.csv')

print(df.info())

Excel

JSON

数据分析和操作

清洗空值

删除包含空字段的行,可以使用 dropna() 方法

python 复制代码
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。

how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置 how='all' 一行(或列)都是 NA 才去掉这整行。

thresh:设置需要多少非空值的数据才可以保留下来的。

subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。

inplace:如果设置 True,将计算得到的值直接覆盖之前的值并返回 None,修改的是源数据。

通过 isnull() 判断各个单元格是否为空。

python 复制代码
import pandas as pd

df = pd.read_csv('property-data.csv')

print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())

Pandas 把 n/a 和 NA 当作空数据,na 不是空数据,不符合我们要求,我们可以指定空数据类型

python 复制代码
import pandas as pd

missing_values = ["n/a", "na", "--"]
df = pd.read_csv('property-data.csv', na_values = missing_values)

print (df['NUM_BEDROOMS'])
print (df['NUM_BEDROOMS'].isnull())

查看数据

数据清洗

相关性热图(Correlation Heatmap)

数据准备

python 复制代码
import pandas as pd
data = {'Math': [90, 80, 70, 85, 95],
        'Chinese': [80, 75, 70, 80, 85],
        'English': [80, 75, 70, 80, 85],
        'Physics': [90, 80, 70, 85, 95],
        'Chemistry': [80, 75, 70, 80, 85]}
df = pd.DataFrame(data)

计算相关性矩阵

python 复制代码
correlation_matrix = df.corr()
print(correlation_matrix)
复制代码
      Math  Chinese  English  Physics  Chemistry

Math 1.0 0.8 0.8 1.0 0.8

Chinese 0.8 1.0 1.0 0.8 1.0

English 0.8 1.0 1.0 0.8 1.0

Physics 1.0 0.8 0.8 1.0 0.8

Chemistry 0.8 1.0 1.0 0.8 1.0

绘制相关性热图(以 Seaborn 为例)

python 复制代码
import seaborn as sns
import matplotlib.pyplot as plt
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.show()

数据排序与聚合

Pandas 数据可视化

相关推荐
民乐团扒谱机几秒前
【读论文】音色在微分音程记忆中的作用
人工智能·深度学习·算法
推送者2 分钟前
立体桌宠定制:一张正脸照到本地九视角标定的工程链路
人工智能·立体桌宠定制
鬼手点金2 分钟前
缓存作为架构约束
开发语言·前端·人工智能·python·microsoft·缓存·架构
dtq04243 分钟前
嵌入式5 - GPIO工作模式2
单片机·嵌入式硬件·学习
lucas_AI4 分钟前
24 天、4310 万行代码:AI 集群啃下了人类史上最长的数学证明
人工智能
蓝祁子yoky6 分钟前
Qt学习日记 Day11:多线程(二)+线程同步/互斥
学习
叼烟扛炮6 分钟前
Linux 学习笔记(三十四):线程同步——条件变量与生产消费者模型
linux·运维·服务器·笔记·学习·1024程序员节
SEO_juper7 分钟前
Node.js 页面主题聚焦度检测:title 和正文各说各的,AI 也读不懂
开发语言·人工智能·node.js·seo·外贸独立站
IT_陈寒7 分钟前
React实战技巧总结:如何优雅处理复杂列表的渲染卡顿问题?
前端·人工智能·后端
lucas_AI9 分钟前
DeepMind 发布 Genie 4:世界模型会「出声」了,一句话实时改写世界
人工智能·llm