前言
大家好,我是橘子皮,上一篇文章和大家分享了Python的基本语法,主要包含变量、数据类型、运算符、控制流语句、函数、模块和包、异常处理、文件处理、面向对象编程。我已经掌握了Python的基本语法,如何是实践所学内容成为我的一个困扰。Python作为一门灵活多变的语言,存在诸多应用场景(AI、WEB),但是这作为一个切入点有点不太现实,毕竟需要再学很多其他框架才可以融会贯通,再这期间,我所掌握这部分基本语法,估计就已经被忘的死死的了。因此,一个常见且实用的应用场景,成为当下之急。这时,我猛然想到了Python还可以用于办公使用,作为数据分析工具,协助我们处理繁杂的数据分析工作,这是个不错的应用方向,说干就干,今天我就介绍一下Python在数据分析中比较常见一些工具。
NumPy
NumPy(Numerical Python)是一个用于科学计算的 Python 库,其最主要的功能是支持多维数组及其运算。NumPy 中的数组对象是一个由同类元素组成的表,每个元素在内存中占用相同的大小,并且可以通过索引进行访问。
NumPy 中的核心数据结构是 ndarray(n-dimensional array),即多维数组,它提供了以下功能:
- 多维数组对象,可以表示向量、矩阵等多维数据集合
- 支持快速的数学运算,包括矩阵运算、向量运算等
- 提供了广泛的数学函数库,包括线性代数、傅里叶变换、随机数生成等
- 支持数组的切片、索引和迭代操作
- 支持数据的输入输出、文件读写等
- 创建数组
NumPy 是 Python 中进行科学计算的重要库之一,提供了高效的数组操作功能。在 NumPy 中,可以通过各种方法创建数组,包括从 Python 列表或元组创建、从文件读取、随机生成、自定义函数生成等方法。
- 从 Python 列表或元组创建数组
可以使用 NumPy 提供的 array 函数从 Python 列表或元组创建数组。例如:
import numpy as np
# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 从列表创建二维数组
arr2 = np.array([[1, 2], [3, 4], [5, 6]])
# 从元组创建一维数组
arr3 = np.array((1, 2, 3, 4, 5))
# 从元组创建二维数组
arr4 = np.array(((1, 2), (3, 4), (5, 6)))
- 从文件读取创建数组
可以使用 NumPy 提供的 loadtxt 函数从文件读取数据创建数组。例如:
import numpy as np
# 从文件读取创建一维数组
arr1 = np.loadtxt('data.txt')
# 从文件读取创建二维数组
arr2 = np.loadtxt('data.txt', delimiter=',')
- 随机生成数组
可以使用 NumPy 提供的随机数生成函数创建数组,包括生成随机整数、随机浮点数、随机正态分布数等。例如:
import numpy as np
# 生成一维随机整数数组
arr1 = np.random.randint(0, 10, size=5)
# 生成二维随机浮点数数组
arr2 = np.random.rand(3, 2)
# 生成一维随机正态分布数数组
arr3 = np.random.randn(5)
- 自定义函数生成数组
可以使用 NumPy 提供的各种函数自定义生成数组,例如:
import numpy as np
# 生成一个等差数列数组
arr1 = np.linspace(0, 1, num=5)
# 生成一个指定形状的全零数组
arr2 = np.zeros((3, 2))
# 生成一个指定形状的全一数组
arr3 = np.ones((2, 4))
# 生成一个指定形状的单位矩阵
arr4 = np.eye(3)
# 生成一个指定形状的随机整数数组
arr5 = np.random.randint(0, 10, size=(2, 3))
- 数组索引和切片
NumPy 中的数组可以使用索引和切片来访问和修改数组中的元素。数组索引和切片类似于 Python 列表,但有一些不同之处。
- 数组索引
可以使用整数或元组来访问数组中的单个元素或子数组。其中,整数索引用于访问一维数组中的元素,而元组索引用于访问多维数组中的元素。
import numpy as np
# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 使用整数索引访问单个元素
print(arr1[0]) # 输出:1
# 创建二维数组
arr2 = np.array([[1, 2], [3, 4], [5, 6]])
# 使用元组索引访问单个元素
print(arr2[0, 0]) # 输出:1
print(arr2[1, 1]) # 输出:4
- 数组切片
可以使用冒号(:)和整数索引来访问数组中的子数组。冒号左侧的索引表示切片开始的位置,右侧的索引表示切片结束的位置(不包括该位置的元素)。如果省略左侧的索引,将从数组的开头开始切片;如果省略右侧的索引,将一直切片到数组的末尾。
import numpy as np
# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 使用切片访问子数组
print(arr1[1:3]) # 输出:[2 3]
print(arr1[:3]) # 输出:[1 2 3]
print(arr1[3:]) # 输出:[4 5]
# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 使用切片访问子数组
print(arr2[:2, :2]) # 输出:[[1 2] [4 5]]
print(arr2[1:, :2]) # 输出:[[4 5] [7 8]]
需要注意的是,数组切片返回的是原数组的视图,而不是复制。因此,对切片进行修改将反映在原数组上。
import numpy as np
# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])
# 修改数组切片
arr1[1:3] = [6, 7]
# 输出修改后的数组
print(arr1) # 输出:[1 6 7 4 5]
- 数学函数库
NumPy是一个Python科学计算库,提供了大量的数学函数库来支持各种数学运算。下面是NumPy数学函数库的详细介绍:
- 数值类型函数
NumPy提供了很多数值类型函数,如绝对值函数(np.absolute)、符号函数(np.sign)、求倒数函数(np.reciprocal)、平方函数(np.square)等。这些函数都是对输入的数值进行操作,并返回相应的数值。
- 三角函数
NumPy提供了所有常见的三角函数,如正弦函数(np.sin)、余弦函数(np.cos)、正切函数(np.tan)等。这些函数接收一个弧度值作为输入,并返回相应的三角函数值。
- 反三角函数
NumPy还提供了反三角函数,如反正弦函数(np.arcsin)、反余弦函数(np.arccos)、反正切函数(np.arctan)等。这些函数接收一个三角函数值作为输入,并返回相应的弧度值。
- 指数和对数函数
NumPy提供了指数函数(np.exp)和对数函数(np.log和np.log10)。指数函数接收一个实数作为输入,并返回e的指数幂。对数函数接收一个实数作为输入,并返回其对数值。
- 统计函数
NumPy提供了很多统计函数,如最大值函数(np.max)、最小值函数(np.min)、平均值函数(np.mean)、中位数函数(np.median)等。这些函数接收一个数组作为输入,并返回相应的统计结果。
- 线性代数函数
NumPy还提供了线性代数函数,如矩阵乘法函数(np.dot)、逆矩阵函数(np.linalg.inv)等。这些函数可以用来解决各种线性代数问题。
- 随机数生成函数
NumPy提供了很多随机数生成函数,如随机数生成函数(np.random.rand)、正态分布函数(np.random.normal)、随机整数生成函数(np.random.randint)等。这些函数可以用来生成各种随机数。
- 数据的输入输出
NumPy可以支持多种数据格式的输入输出,包括文本文件、二进制文件、NumPy自有的二进制格式等。
- 从文本文件中读取数据
import numpy as np
# 读取CSV文件
data = np.loadtxt('data.csv', delimiter=',', dtype=float)
# 读取纯文本文件
data = np.loadtxt('data.txt', dtype=int)
- 将数据保存到文本文件中
import numpy as np
# 保存为CSV文件
data = np.random.rand(5, 3)
np.savetxt('data.csv', data, delimiter=',')
# 保存为纯文本文件
data = np.random.randint(0, 10, size=(5, 3))
np.savetxt('data.txt', data, fmt='%d')
- 从二进制文件中读取数据
import numpy as np
# 读取.npy格式文件
data = np.load('data.npy')
# 读取.npz格式文件
npzfile = np.load('data.npz')
data1 = npzfile['data1']
data2 = npzfile['data2']
- 将数据保存到二进制文件中
import numpy as np
# 保存为.npy格式文件
data = np.random.rand(5, 3)
np.save('data.npy', data)
# 保存为.npz格式文件
data1 = np.random.rand(5)
data2 = np.random.randint(0, 10, size=(5, 3))
np.savez('data.npz', data1=data1, data2=data2)
- 从MATLAB格式文件中读取数据
import numpy as np
from scipy.io import loadmat
# 读取MATLAB格式文件
matfile = loadmat('data.mat')
data = matfile['data']
- 将数据保存到MATLAB格式文件中
import numpy as np
from scipy.io import savemat
# 保存为MATLAB格式文件
data = np.random.rand(5, 3)
savemat('data.mat', {'data': data})
- 从HDF5格式文件中读取数据
import numpy as np
import h5py
# 读取HDF5格式文件
with h5py.File('data.hdf5', 'r') as f:
data = f['data'][:]
- 将数据保存到HDF5格式文件中
import numpy as np
import h5py
# 保存为HDF5格式文件
data = np.random.rand(5, 3)
with h5py.File('data.hdf5', 'w') as f:
f.create_dataset('data', data=data)import numpy as np
import h5py
# 保存为HDF5格式文件
data = np.random.rand(5, 3)
with h5py.File('data.hdf5', 'w') as f:
f.create_dataset('data', data=data)
Pandas
Pandas是一个开源的Python数据分析库,它提供了一组数据结构和函数,使得用户可以轻松地处理表格型数据(例如SQL表或Excel表),并支持多种数据操作功能(例如数据的清洗、聚合、转换、合并等)。Pandas是基于NumPy数组构建的,因此其功能也和NumPy密切相关。
Pandas提供了两种主要的数据结构:Series和DataFrame。
Series
Series是一个带标签的一维数组,类似于字典,其中标签可以是整数或字符串。每个元素都有一个索引,可以通过索引进行访问。Series提供了许多常见的数组操作,如切片、索引和算术运算。
Series对象可以使用多种方式创建,包括从Python列表、NumPy数组和字典中创建。以下是一个从Python列表创建Series对象的示例:
import pandas as pd
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
print(s)
在上面的示例中,创建了一个包含整数的Python列表,并将其传递给Series()函数,生成了一个新的Series对象。由于列表中的元素都是整数,Pandas会自动将Series对象的数据类型设置为int64。
Series对象有两个主要属性,分别是values和index。values属性返回Series对象中的数据数组,而index属性返回Series对象中的索引数组。例如:
print(s.values) # [10 20 30 40 50]
print(s.index) # RangeIndex(start=0, stop=5, step=1)
可以使用自定义索引创建Series对象。例如:
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index=index)
print(s)
在上面的示例中,使用自定义索引创建了一个新的Series对象。索引数组包含了字母标签,而不是默认的整数标签。
Series对象提供了许多操作和方法,以下是一些常用的操作和方法:
- 索引和切片
Series对象的索引可以是整数、标签或布尔值数组。可以使用索引和切片操作来选择Series对象中的子集。例如:
s = pd.Series([10, 20, 30, 40, 50], index=['a', 'b', 'c', 'd', 'e'])
s['b'] # 20
s[1:3] # b 20 c 30 dtype: int64
s[['a', 'c', 'e']] # a 10 c 30 e 50 dtype: int64
s[s > 30] # d 40 e 50 dtype: int64
- 基本算术运算
可以对Series对象执行基本的算术运算,例如加法、减法、乘法和除法。Pandas将自动对齐两个Series对象中的索引,然后执行运算。例如:
s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s2 = pd.Series([20, 30, 40], index=['b', 'c', 'd'])
s1 + s2 # a NaN b 40.0 c 60.0 d NaN dtype: float64
s1 * 2 # a 20 b 40 c 60 dtype: int64
s1 / 10 # a 1.0 b 2.0 c 3.0 dtype: float64
在上面的示例中,执行了两个Series对象之间的加法、乘法和除法运算。在加法运算中,Pandas将自动对齐s1和s2中的索引,并在没有匹配索引的情况下插入NaN值。在乘法和除法运算中,Pandas将对Series对象中的每个元素执行运算。
- 比较运算
可以对Series对象执行比较运算,例如相等、不相等、大于、小于、大于等于和小于等于。这些运算将返回一个布尔值Series对象。例如:
s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s2 = pd.Series([20, 30, 40], index=['b', 'c', 'd'])
s1 == s2 # a False b True c False d False dtype: bool
s1 > s2 # a False b False c False d False dtype: bool
s1 <= s2 # a True b True c True d False dtype: bool
在上面的示例中,执行了两个Series对象之间的比较运算。每个运算将对Series对象中的每个元素执行比较,并返回一个布尔值Series对象。
- 统计函数
Series对象提供了许多常用的统计函数,例如sum、mean、std、min、max、median等。
- sum():返回Series对象中所有元素的总和。
s = pd.Series([10, 20, 30, 40, 50])
s.sum() # 150
- mean():返回Series对象中所有元素的平均值。
s = pd.Series([10, 20, 30, 40, 50])
s.mean() # 30.0
- std():返回Series对象中所有元素的标准差。
s = pd.Series([10, 20, 30, 40, 50])
s.std() # 15.811388300841896
- min():返回Series对象中所有元素的最小值。
s = pd.Series([10, 20, 30, 40, 50])
s.min() # 10
- max():返回Series对象中所有元素的最大值。
s = pd.Series([10, 20, 30, 40, 50])
s.max() # 50
- median():返回Series对象中所有元素的中位数。
s = pd.Series([10, 20, 30, 40, 50])
s.median() # 30.0
- quantile():返回Series对象中所有元素的分位数。分位数表示给定分组中的一个值,该分组将观察值分成等份。
s = pd.Series([10, 20, 30, 40, 50])
s.quantile(0.25) # 20.0
- describe():返回Series对象的描述性统计信息,包括计数、平均值、标准差、最小值、25%、50%、75%和最大值。
s = pd.Series([10, 20, 30, 40, 50])
s.describe()
count 5.0
mean 30.0
std 15.8
min 10.0
25% 20.0
50% 30.0
75% 40.0
max 50.0
dtype: float64
- value_counts():返回Series对象中每个唯一值的计数。
s = pd.Series(['a', 'b', 'a', 'c', 'b', 'a'])
s.value_counts()
a 3
b 2
c 1
dtype: int64
- unique():返回Series对象中所有唯一值的数组。
s = pd.Series(['a', 'b', 'a', 'c', 'b', 'a'])
s.unique() # array(['a', 'b', 'c'], dtype=object)
DataFrame
DataFrame是一个类似于二维表格的数据结构,可以将数据按行和列排列,每一列可以有不同的数据类型(整数、浮点数、字符串等),可以方便地进行数据处理和分析。下面是DataFrame的一些特点和常见操作:
特点
- DataFrame是由多个Series组成的,每一列可以看作是一个Series,每一行可以看作是对应的元素。
- 可以通过标签或位置索引来访问DataFrame的行和列。
- 可以将数据保存为CSV、Excel、SQL等格式,方便与其他工具交互。
- 可以对数据进行筛选、排序、分组、聚合等操作,方便进行数据分析和可视化。
常见操作
- 创建DataFrame
可以通过字典、二维数组、CSV等方式创建DataFrame对象,例如
import pandas as pd
# 从字典创建DataFrame
data = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]}
df = pd.DataFrame(data)
# 从二维数组创建DataFrame
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(data, columns=['a', 'b', 'c'])
# 从CSV文件创建DataFrame
df = pd.read_csv('data.csv')
- 数据获取和观察
DataFrame数据获取和观察是对DataFrame中的数据进行观察和获取的操作,包括对DataFrame的元素、形状、基本信息、部分数据进行获取和观察的方法。
- head和tail方法
head和tail方法可以用于查看DataFrame的前几行或后几行数据,默认显示前5行或后5行。其语法如下:
# 显示前5行数据
df.head()
# 显示前3行数据
df.head(3)
# 显示后5行数据
df.tail()
# 显示后3行数据
df.tail(3)
- shape属性
shape属性可以获取DataFrame的形状,即行数和列数。其语法如下:
# 获取DataFrame的形状
df.shape
- info方法
info方法可以获取DataFrame的基本信息,包括每一列的名称、数据类型、非空值数量等。其语法如下:
# 获取DataFrame的基本信息
df.info()
- describe方法
describe方法可以获取DataFrame的描述性统计信息,包括每一列的数量、均值、标准差、最小值、25%、50%、75%和最大值。其语法如下:
# 获取DataFrame的描述性统计信息
df.describe()
- 数据选择和切片
DataFrame数据选择和切片是对DataFrame中的某些行、列或元素进行选择和切片的操作,常用的方法包括loc、iloc、[]、at和iat。
- loc方法
loc方法基于行和列的标签(label)进行选择,其语法如下:
# 选择某些行和列
df.loc[row_labels, col_labels]
# 选择某一行
df.loc[row_label]
# 选择某一列
df.loc[:, col_label]
# 选择某些行和所有列
df.loc[row_labels, :]
# 选择某些列和所有行
df.loc[:, col_labels]
- iloc方法
iloc方法基于行和列的位置(position)进行选择,其语法如下:
# 选择某些行和列
df.iloc[row_indices, col_indices]
# 选择某一行
df.iloc[row_index]
# 选择某一列
df.iloc[:, col_index]
# 选择某些行和所有列
df.iloc[row_indices, :]
# 选择某些列和所有行
df.iloc[:, col_indices]
- []操作符
[]操作符可以用于选择某一列或多列,其语法如下:
# 选择某一列
df[col_label]
# 选择某些列
df[[col_label_1, col_label_2, ...]]
- at和iat方法
at和iat方法可以用于选择某个元素,其语法如下:
# 使用at方法选择某个元素
df.at[row_label, col_label]
# 使用iat方法选择某个元素
df.iat[row_index, col_index]
- 数据处理和修改
DataFrame数据处理和修改是对DataFrame中的数据进行处理和修改的操作,常用的方法包括apply、applymap、map、replace、groupby等。
- apply方法
apply方法可以对DataFrame中的行或列应用某个函数,其语法如下:
# 对某一列应用函数
df[col_label].apply(func)
# 对某一行应用函数
df.loc[row_label].apply(func)
# 对整个DataFrame应用函数
df.apply(func, axis=0/1)
其中,axis=0表示对列应用函数,axis=1表示对行应用函数。
- applymap方法
applymap方法可以对DataFrame中的每个元素应用某个函数,其语法如下:
# 对DataFrame中的每个元素应用函数
df.applymap(func)
- map方法
map方法可以将DataFrame中的某一列映射为另一列,其语法如下:
# 将DataFrame中的某一列映射为另一列
df[col_label].map(mapping_dict)
其中,mapping_dict是一个字典,用于将某些值映射为另一些值。
- replace方法
replace方法可以将DataFrame中的某些值替换为另一些值,其语法如下:
# 将DataFrame中的某些值替换为另一些值
df.replace(old_value, new_value)
其中,old_value是需要被替换的值,new_value是替换后的值。
- groupby方法
groupby方法可以对DataFrame中的数据进行分组,并对每个分组应用某个函数,其语法如下
# 对DataFrame中的数据进行分组,并对每个分组应用某个函数
df.groupby(group_col).apply(func)
其中,group_col是用于分组的列,func是应用于每个分组的函数。
- 数据排序和重排
在数据分析过程中,对数据进行排序和重排是一项非常重要的操作。在 Pandas 中,DataFrame 数据排序和重排可以通过 sort_values、sort_index 和 reindex 等方法实现。
- sort_values 方法
sort_values 方法可以对 DataFrame 按照指定的列进行排序,其语法如下:
# 对 DataFrame 按照指定的列进行排序
df.sort_values(by=col, ascending=True/False)
其中,by 参数指定要排序的列,ascending 参数指定排序方式,True 表示升序排列,False 表示降序排列。
- sort_index 方法
sort_index 方法可以对 DataFrame 按照行或列索引进行排序,其语法如下:
# 对 DataFrame 按照行或列索引进行排序
df.sort_index(axis=0/1, ascending=True/False)
其中,axis 参数指定按照行或列索引排序,0 表示按照行索引排序,1 表示按照列索引排序,ascending 参数指定排序方式,True 表示升序排列,False 表示降序排列。
- reindex 方法
reindex 方法可以对 DataFrame 进行重排,可以重新索引和排序 DataFrame 的行和列,其语法如下:
# 对 DataFrame 进行重排
df.reindex(index=new_index, columns=new_columns)
其中,new_index 和 new_columns 参数分别指定 DataFrame 的新行索引和新列索引。
- 数据分组和聚合
在数据分析过程中,常常需要对数据进行分组和聚合,以便更好地理解和分析数据。在 Pandas 中,可以使用 groupby 和 agg 方法来实现数据分组和聚合。
- groupby 方法
groupby 方法可以根据指定的列将 DataFrame 数据分组,其语法如下:
# 根据指定的列将 DataFrame 数据分组
df.groupby(by=col)
其中,by 参数指定要进行分组的列。groupby 方法返回的是一个 DataFrameGroupBy 对象,它包含了被分组的数据和分组标签。
- agg 方法
agg 方法可以对 DataFrame 进行聚合操作,其语法如下:
# 对 DataFrame 进行聚合操作
df.agg(func)
其中,func 参数指定聚合函数,可以是内置的聚合函数(如 sum、mean、min、max 等)或自定义的聚合函数。
在使用 agg 方法时,通常需要先使用 groupby 方法进行分组。例如:
# 对 DataFrame 按照 sex 列进行分组,计算 age 和 height 列的平均值
df.groupby(by='sex').agg({'age': 'mean', 'height': 'mean'})
上述代码中,首先使用 groupby 方法按照 sex 列进行分组,然后使用 agg 方法计算 age 和 height 列的平均值。
除了 agg 方法之外,还可以使用其他一些聚合函数,例如 mean、sum、min、max、count 等。这些函数可以直接使用 DataFrame 的方法进行调用,例如:
# 计算 DataFrame 中每列的平均值
df.mean()
# 计算 DataFrame 中每列的最大值
df.max()
# 计算 DataFrame 中每列的最小值
df.min()
# 计算 DataFrame 中每列的总和
df.sum()
需要注意的是,对于分组后的 DataFrameGroupBy 对象,也可以使用这些方法进行聚合操作。例如:
# 对 DataFrameGroupBy 对象进行聚合操作,计算 age 列的平均值
df.groupby(by='sex')['age'].mean()
上述代码中,首先使用 groupby 方法按照 sex 列进行分组,然后对 age 列使用 mean 方法进行聚合操作,得到了每个 sex 分组的平均年龄。
- 数据合并和拼接
在数据分析过程中,常常需要将多个 DataFrame 合并或拼接起来,以便更好地分析和处理数据。在 Pandas 中,可以使用 merge 和 concat 方法来实现 DataFrame 数据的合并和拼接。
- merge 方法
merge 方法可以将两个 DataFrame 按照指定的键(key)合并,其语法如下:
# 按照指定的键(key)合并两个 DataFrame
pd.merge(left, right, on=col)
其中,left 和 right 分别为待合并的两个 DataFrame,on 参数指定用来进行合并的列名或列名列表。
- concat 方法
concat 方法可以将多个 DataFrame 沿着指定的轴(axis)进行拼接,其语法如下:
# 沿着指定的轴(axis)拼接多个 DataFrame
pd.concat(objs, axis=0)
其中,objs 参数为待拼接的 DataFrame 序列或字典,axis 参数指定拼接的轴向,可以是 0(行)或 1(列)。
需要注意的是,待拼接的 DataFrame 应该具有相同的列名和数据类型。如果某些列名在不同的 DataFrame 中不一致,则可以使用 merge 方法的 left_on 和 right_on 参数指定各自的列名。如果某些列在某个 DataFrame 中不存在,则可以使用 merge 方法的 how 参数指定合并方式。
例如,对于两个 DataFrame,可以按照 id 列进行合并,代码如下:
# 创建两个 DataFrame
df1 = pd.DataFrame({'id': ['001', '002', '003'], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [20, 25, 30]})
df2 = pd.DataFrame({'id': ['001', '002', '004'], 'gender': ['F', 'M', 'F'], 'height': [160, 175, 165]})
# 按照 id 列进行合并
pd.merge(df1, df2, on='id')
上述代码中,首先创建了两个 DataFrame(df1 和 df2),然后按照 id 列进行合并,得到了一个新的 DataFrame。如果 id 列在两个 DataFrame 中的列名不一致,可以使用 left_on 和 right_on 参数指定各自的列名。如果某些 id 在 df2 中不存在,则可以使用 how 参数指定合并方式。例如:
# 创建两个 DataFrame
df1 = pd.DataFrame({'id': ['001', '002', '003'], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [20, 25, 30]})
df2 = pd.DataFrame({'sid': ['001', '002', '004'], 'gender': ['F', 'M', 'F'], 'height': [160, 175, 165]})
# 按照不同的列名进行合并,并使用 outer 方式进行合并
pd.merge(df1, df2, left_on='id', right_on='sid', how='outer')
上述代码中,由于 id 列和 sid 列在两个 DataFrame 中的列名不一
- 数据输入和输出
在 Pandas 中,可以使用不同的方式来读取和写入数据。常用的数据格式包括 CSV、Excel、SQL 数据库、JSON、HTML、以及 HDF5 等。
- 读取数据
读取数据可以使用 read_csv、read_excel、read_sql、read_json、read_html、read_hdf 等方法。
以读取 CSV 文件为例,其语法如下:
# 读取 CSV 文件
df = pd.read_csv(file_path, sep=',', header='infer', names=None, index_col=None)
其中,file_path 为 CSV 文件的路径,sep 参数指定分隔符,默认为逗号,header 参数指定是否使用文件的第一行作为列名,默认为 ‘infer’,names 参数指定列名,index_col 参数指定索引列。
- 写入数据
写入数据可以使用 to_csv、to_excel、to_sql、to_json、to_html、to_hdf 等方法。
以写入 CSV 文件为例,其语法如下:
# 将 DataFrame 写入 CSV 文件
df.to_csv(file_path, sep=',', header=True, index=True)
其中,file_path 为 CSV 文件的路径,sep 参数指定分隔符,默认为逗号,header 参数指定是否输出列名,默认为 True,index 参数指定是否输出索引列,默认为 True。
以上是今天的分享,谢谢大家阅读