跳转至

Pandas & Numpy

现在有GPT也不需要记住非常细节的语法,只需要搞清楚核心几个用法即可。

Pandas

参考资料:Python Pandas库教程(超详细)

基础知识

Pandas主要采用Series和DataFrame两种数据结构。

  • Series是一种类似一维数据的数据结构,由数据(values)及索引(indexs)组成。
  • DataFrame是一个表格型的数据结构,每列的数据可以为不同类型(NumPy数据组中数据要求为相同类型),它既有行索引(index),也有列索引(cloumn)
  • Series相当于一列DataFrame。

个人认为Series这种类型没什么好讲的,而且一般用不到。

读入和写入数据

# 读入和写入数据
pd.read_csv()
DataFrame.to_csv()

查看数据

# 查看数据及其统计性信息
DataFrame.head()
DataFrame.describe()

# 查看属性
df.index     ##显示索引(显示标签索引或位置索引)
df.columns   ##显示列名
df.values    ##显示值

# 查看长度、形状、大小
print("Number of rows:", len(df))
print("Shape of DataFrame:", df.shape)
print("Total number of elements:", df.size)
  • len(df) 返回的是 DataFrame 中的行数。
  • df.shape 返回一个元组,其内容是(行数,列数)。
  • df.size 返回的是 DataFrame 中所有元素的总数(等于行数乘以列数)。

选择数据

# 选择数据(前行后列)
subset = DataFrame.iloc[start_row:end_row, start_column:end_column]
subset = DataFrame.loc[start_label:end_label, ['column_name1', 'column_name2', ...]]
DataFrame['column_name'] # 快速选择列
DataFrame[name_list] # 快速选择多个列

过滤数据

#(条件过滤)
## 数字
condition = (DataFrame['column1'] > value1) & (DataFrame['column2'] < value2)
condition = DataFrame['column_name'].isin([value1, value2, ...])
## 文字
condition = DataFrame['column_name'].str.contains('substring')
filtered_data = DataFrame[condition]

#(查询过滤)
filtered_data = DataFrame.query("column1 > value1 and column2 < value2") 

分组与聚合

# 分组操作
grouped_data = DataFrame.groupby('column_name')

# 聚合操作
mean_result = grouped_data.mean() # count/max/min/size/first/last/describe
agg_result = grouped_data.agg(['mean', 'sum', 'count']) # 进行一组聚合操作

数据处理

在Pandas中,apply和map是两个非常强大的方法,用于对DataFrame或Series中的数据进行转换和操作。map方法是专门用于Series的,用于将一个函数应用于Series中的每一个元素。

#全局处理,每个元素乘2
df.apply(lambda x : x * 2) 

#列级或行级处理,每列的最大值减去最小值
df.apply(lambda x : x.max() - x.min(), axis = 0) ## x代表一列
df.apply(lambda x : x.max() - x.min(), axis = 1) ## x代表一行

#行级处理,第二行的每个元素乘2
df.iloc[1].map(lambda x : x * 2) 

Numpy

创建

import numpy as np 
a = np.array([1,2,3])  
a = np.array([[1,  2],  [3,  4]])  
a = np.array([1, 2, 3, 4, 5], ndmin =  2)  # [[1 2 3 4 5]]

random_array = np.random.rand(2, 3)  # 创建一个 2x3 的数组,元素是随机分布的
normal_array = np.random.randn(4, 2)  # 创建一个 4x2 的数组,元素是正态分布的

类型

import numpy as np

# 创建具有特定数据类型的数组
a = np.array([1, 2, 3], dtype=np.float64)
b = np.array([1.0, 2.0, 3.0], dtype=np.int32)

# 查询数组的数据类型
print(a.dtype)  # 输出: float64
print(b.dtype)  # 输出: int32