紧接上篇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.loc[0, 'Name']会返回第一行(索引为 0)的 'Name' 列的值,即 'Alice';df.iloc[1, 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()