本文是关于数据分析的两个常用库pandas和numpy的一些基础知识点

一、Numpy基础

Numpy 是 Python 中用于科学计算的基础库

  1. 导入numpy库
    import numpy as np

  2. 创建数组

# 从列表创建
arr1 = np.array([1, 2, 3, 4])
# 创建全0数组
zeros = np.zeros((3, 4))
# 创建全1数组
ones = np.ones((2, 3))
# 创建单位矩阵
eye = np.eye(3)
# 创建等差数列
arange = np.arange(0, 10, 2)  # 0到10,步长2
linspace = np.linspace(0, 1, 5)  # 0到1之间5个等分点
# 随机数组
random_arr = np.random.rand(2, 3)  # 0-1均匀分布
normal_arr = np.random.randn(2, 3)  # 标准正态分布
  1. 数组属性
arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.shape)  # 形状 (2, 3)
print(arr.ndim)   # 维度 2
print(arr.size)   # 元素总数 6
print(arr.dtype)  # 数据类型 int64
  1. 基本操作
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 算术运算
print(a + b)  # [5 7 9]
print(a * b)  # [4 10 18]
# 矩阵乘法
mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[5, 6], [7, 8]])
print(np.dot(mat1, mat2))  # 或 mat1 @ mat2
# 索引和切片
print(a[1])       # 2
print(arr[0, 1])  # 2 (二维数组)
print(arr[:, 1])  # 第2列 [2 5]
# 布尔索引
mask = a > 1
print(a[mask])  # [2 3]
  1. 常用函数
# 数学函数
print(np.sqrt(a))      # 平方根
print(np.exp(a))       # 指数
print(np.log(a))       # 自然对数
print(np.abs(-a))      # 绝对值
# 聚合函数
print(np.sum(a))       # 总和
print(np.mean(a))      # 平均值
print(np.std(a))       # 标准差
print(np.max(a))       # 最大值
print(np.argmax(a))    # 最大值索引
# 排序
sorted_arr = np.sort(a)
  1. NumPy 广播机制
# 广播示例
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])
# b会被广播为与a相同的形状
print(a + b)  # 等同于 a + [[10,20,30],[10,20,30]]

二、Pandas 基础

Pandas 是基于 NumPy 的数据分析库,用于数据清洗、处理和分析
提供两种主要数据结构:Series对象(一维)和 DataFrame对象(二维)

  1. 导入pandas库
    import pandas as pd

  2. Series

# 创建Series对象
s1 = pd.Series([1, 3, 5, 7])
s2 = pd.Series([1, 3, 5], index=['a', 'b', 'c'])
# 访问数据
print(s1[0])      # 1
print(s2['b'])    # 3
# 运算
print(s1 * 2)     # 每个元素乘以2
print(s1 + s2)    # 对应位置相加(按索引)
  1. DataFrame
# 创建DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['NY', 'LA', 'Chicago']
}
df = pd.DataFrame(data)
# 从CSV创建
# df = pd.read_csv('data.csv')
# 查看数据
print(df.head())      # 前5行
print(df.tail(2))     # 后2行
print(df.shape)       # 形状 (3, 3)
print(df.columns)     # 列名
print(df.index)       # 行索引
# 选择列
print(df['Name'])     # 选择Name列
print(df.Age)         # 也可以使用点号(列名不含空格时)
# 选择行
print(df.iloc[0])     # 第1行(基于位置)
print(df.loc[0])      # 第1行(基于标签)
print(df[:2])         # 前2行
# 条件选择
mask = df['Age'] > 28
print(df[mask])       # 年龄大于28的行
  1. 数据操作
# 添加列
df['Salary'] = [70000, 80000, 90000]
# 删除列
df = df.drop('City', axis=1)  # axis=1表示列
# 修改数据
df.loc[0, 'Age'] = 26
# 排序
df_sorted = df.sort_values('Age', ascending=False)
# 处理缺失值
df_with_nan = pd.DataFrame({
    'A': [1, 2, np.nan],
    'B': [5, np.nan, np.nan],
    'C': [1, 2, 3]
})
print(df_with_nan.dropna())       # 删除含NaN的行
print(df_with_nan.fillna(0))     # 用0填充NaN
print(df_with_nan.mean())         # 计算均值(自动忽略NaN)
  1. 常用函数
# 描述性统计
print(df.describe())  # 数值列的统计信息
# 应用函数
def square(x):
    return x * x
print(df['Age'].apply(square))  # 对Age列应用平方函数
# 分组聚合
grouped = df.groupby('City')['Age'].mean()  # 按City分组计算Age均值
# 合并数据
df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']})
df2 = pd.DataFrame({'A': ['A0', 'A2'], 'C': ['C0', 'C2']})
print(pd.merge(df1, df2, on='A'))  # 基于A列合并
# 连接
left = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']})
right = pd.DataFrame({'C': ['C0', 'C1'], 'D': ['D0', 'D1']})
print(pd.concat([left, right], axis=1))  # 水平连接
  1. 文件操作
# 读取CSV
df = pd.read_csv('data.csv')
# 读取Excel
# df = pd.read_excel('data.xlsx')
# 写入文件
df.to_csv('output.csv', index=False)  # 不写入行索引
# df.to_excel('output.xlsx', index=False)
  1. Pandas 时间序列
# 创建时间范围
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 重采样
monthly = df.resample('M').mean()  # 按月重采样取均值
  1. 多级索引
# 创建多级索引
arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
s = pd.Series(np.random.randn(4), index=index)
# 选择数据
print(s['A'])          # 选择first=A的所有数据
print(s[:, 1])         # 选择second=1的所有数据
print(s.xs('A'))       # 使用xs选择first=A的数据
posted on 2025-10-14 22:14  G6汤汤汤  阅读(6)  评论(0)    收藏  举报