Python数据分析

前言

  大家好,我是橘子皮,上一篇文章和大家分享了Python的基本语法,主要包含变量、数据类型、运算符、控制流语句、函数、模块和包、异常处理、文件处理、面向对象编程。我已经掌握了Python的基本语法,如何是实践所学内容成为我的一个困扰。Python作为一门灵活多变的语言,存在诸多应用场景(AI、WEB),但是这作为一个切入点有点不太现实,毕竟需要再学很多其他框架才可以融会贯通,再这期间,我所掌握这部分基本语法,估计就已经被忘的死死的了。因此,一个常见且实用的应用场景,成为当下之急。这时,我猛然想到了Python还可以用于办公使用,作为数据分析工具,协助我们处理繁杂的数据分析工作,这是个不错的应用方向,说干就干,今天我就介绍一下Python在数据分析中比较常见一些工具。

NumPy

NumPy(Numerical Python)是一个用于科学计算的 Python 库,其最主要的功能是支持多维数组及其运算。NumPy 中的数组对象是一个由同类元素组成的表,每个元素在内存中占用相同的大小,并且可以通过索引进行访问。

NumPy 中的核心数据结构是 ndarray(n-dimensional array),即多维数组,它提供了以下功能:

  • 多维数组对象,可以表示向量、矩阵等多维数据集合
  • 支持快速的数学运算,包括矩阵运算、向量运算等
  • 提供了广泛的数学函数库,包括线性代数、傅里叶变换、随机数生成等
  • 支持数组的切片、索引和迭代操作
  • 支持数据的输入输出、文件读写等
  1. 创建数组

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))
  1. 数组索引和切片

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]
  1. 数学函数库

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)等。这些函数可以用来生成各种随机数。

  1. 数据的输入输出

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对象提供了许多操作和方法,以下是一些常用的操作和方法:

  1. 索引和切片

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
  1. 基本算术运算

可以对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对象中的每个元素执行运算。

  1. 比较运算

可以对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对象。

  1. 统计函数

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等格式,方便与其他工具交互。
  • 可以对数据进行筛选、排序、分组、聚合等操作,方便进行数据分析和可视化。
常见操作
  1. 创建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')
  1. 数据获取和观察

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()
  1. 数据选择和切片

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]
  1. 数据处理和修改

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是应用于每个分组的函数。

  1. 数据排序和重排

在数据分析过程中,对数据进行排序和重排是一项非常重要的操作。在 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 的新行索引和新列索引。

  1. 数据分组和聚合

在数据分析过程中,常常需要对数据进行分组和聚合,以便更好地理解和分析数据。在 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 分组的平均年龄。

  1. 数据合并和拼接

在数据分析过程中,常常需要将多个 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 中的列名不一

  1. 数据输入和输出

在 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。

 以上是今天的分享,谢谢大家阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值