Pandas 简介
Pandas 是基于 NumPy 的一个数据分析库,提供了快速、灵活和表达力强的数据结构,旨在使数据清洗和分析工作变得更加简单易行。
基本数据结构
- Series:一维数组结构,可以包含任何数据类型。
- DataFrame:二维表格型数据结构,类似于 Excel 中的表格,可以包含多种数据类型。
数据读取与写入
- 使用
pd.read_csv()
读取 CSV 文件。 - 使用
pd.read_excel()
读取 Excel 文件。 - 使用
pd.read_sql()
读取 SQL 数据库。 - 使用
pd.to_csv()
将数据写入 CSV 文件。 - 使用
pd.to_excel()
将数据写入 Excel 文件。
4. 数据清洗
- 缺失值处理:
dropna()
删除缺失值,fillna()
填充缺失值。 - 重复值处理:
drop_duplicates()
删除重复行。 - 数据类型转换:
astype()
转换数据类型。
数据选择
- 索引和选择:使用
.loc[]
和.iloc[]
进行数据选择。 - 条件选择:使用布尔索引进行条件筛选。
数据操作
- 添加和删除列:
df['new_column'] = ...
添加新列,df.drop()
删除列。 - 行和列的重塑:
melt()
将宽格式转换为长格式,pivot()
将数据透视。
数据合并
- Concatenation:
pd.concat()
纵向或横向合并数据。 - Merge:
pd.merge()
类似 SQL 的 JOIN 操作。
数据分组
- 使用
groupby()
对数据进行分组,然后应用聚合函数如sum()
、mean()
、max()
等。
数据转换
- 重塑:
pivot_table()
创建数据透视表。 - 聚合:对数据分组后进行聚合操作。
时间序列分析
- 处理时间序列数据,使用
pd.to_datetime()
转换时间格式。 - 时间戳排序,重采样等。
数据可视化
- Pandas 可以与 Matplotlib 集成,使用
df.plot()
进行数据可视化。
性能优化
- 使用
categorical
类型优化内存使用。 - 使用
eval()
和query()
进行快速数据筛选。
处理大型数据集
- 使用
chunksize
参数分块读取大型文件。
进阶功能
- 使用
apply()
函数进行自定义操作。 - 使用
rolling()
、expanding()
等窗口函数进行时间序列分
python
import pandas as pd # 创建一个 DataFrame data = { 'Column1': [1, 2, 3, 4], 'Column2': ['a', 'b', 'c', 'd'], 'Column3': [1.1, 2.2, 3.3, 4.4] } df = pd.DataFrame(data) # 数据读取 df_csv = pd.read_csv('file.csv') # 数据清洗 df.dropna(inplace=True) # 删除缺失值 df.fillna(value=0, inplace=True) # 填充缺失值为0 # 数据选择 selected_data = df.loc[0:2, 'Column1':'Column2'] # 选择前两行的Column1和Column2 # 数据合并 df_concatenated = pd.concat([df1, df2], axis=0) # 纵向合并 # 数据分组 grouped = df.groupby('Column2') # 数据转换 pivot_table = df.pivot_table(values='Column3', index='Column1', columns='Column2') # 数据可视化 df['Column1'].plot() # 性能优化 df['Column2'] = df['Column2'].astype('category')
创建使用Pandas库的DataFrame对象
frame = pd.DataFrame(np.arange(8).reshape((2, 4)),
index=['2', '1'],
columns=['d', 'a', 'b', 'c'])
frame
这段代码用于创建一个2行4列的DataFrame,其中索引为'2'和'1',列名为'd', 'a', 'b', 'c'。下面是代码执行后DataFrame的样子:
import pandas as pd import numpy as np # 创建一个2行4列的DataFrame frame = pd.DataFrame(np.arange(8).reshape((2, 4)), index=['2', '1'], columns=['d', 'a', 'b', 'c']) # 显示DataFrame print(frame)
执行这段代码后,DataFrame frame
将显示如下:
d a b c 2 0 1 2 3 1 4 5 6 7
这里,np.arange(8)
生成一个0到7的数组,.reshape((2, 4))
将这个数组重新排列成一个2行4列的数组,然后这个数组被用作DataFrame的数据。索引和列名通过参数指定。
基于某列升/降序排列
import pandas as pd
# 示例数据
data = {
'A': [1, 2, 3, 4],
'B': [5, 6, 7, 8],
'C': [9, 0, 2, 1]
}
df = pd.DataFrame(data)
# 按列'C'的值进行升序排序
sorted_df = df.sort_values(by='C', ascending=True)
print(sorted_df)
在Python中,frame.sort_values(by='c', ascending=True)
是一个用于对pandas DataFrame进行排序的语句。这里简要解释一下这个语句的组成部分:
frame
:这通常是一个pandas DataFrame对象的名称。sort_values()
:这是DataFrame的一个方法,用于根据某些列的值对数据进行排序。by='c'
:这指定了排序的列名。在这个例子中,排序是基于列名为'c'的列。ascending=True
:这指定了排序的方向。如果设置为True
,则表示按升序排序;如果设置为False
,则表示按降序排序。
输出
A B C
3 4 8 1
2 3 7 2
0 1 5 9
1 2 6 0
在pandas中,DataFrame是一个二维标签数据结构,可以存储不同类型的数据。每个DataFrame都包含多个列,每列可以有不同的名称。这些列名通常用于引用数据。
当你看到“排序是基于列名为'c'的列”时,这里的意思是:
- 列名:在DataFrame中,每一列都有一个名字。比如,列名可能是'A'、'B'、'C'等。
- 排序:
sort_values()
方法用于对DataFrame中的行进行排序。 - 依据:
by='c'
参数告诉sort_values()
方法,排序的依据是列名为'c'的这一列的值。
具体来说,假设你有一个DataFrame如下:
python
import pandas as pd data = { 'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 0, 2, 1] } df = pd.DataFrame(data) print(df)
输出可能是:
A B C 0 1 5 9 1 2 6 0 2 3 7 2 3 4 8 1
如果你执行:
python
sorted_df = df.sort_values(by='C', ascending=True) print(sorted_df)
输出将变为:
A B C 1 2 6 0 3 4 8 1 2 3 7 2 0 1 5 9
在这个例子中,DataFrame df
首先被创建,然后使用sort_values(by='C', ascending=True)
方法按列'C'的值进行升序排序。这意味着所有的行将根据列'C'中的值从小到大重新排列。
当你使用sort_values()
方法对DataFrame进行排序时:
by='c'
:这指定了排序的依据是列名为'c'的列。ascending=True
:这指定了排序的方向是升序。
因此,整个DataFrame的行将会根据列'c'中的值进行排序,而其他列的值会相应地跟随行的变化而变化,但它们本身并不单独进行排序。这里是一个具体的例子:
假设有以下DataFrame:
python
import pandas as pd data = { 'A': [1, 2, 3, 4], 'B': [5, 6, 7, 8], 'C': [9, 0, 2, 1] } df = pd.DataFrame(data) print("原始DataFrame:") print(df)
输出:
A B C 0 1 5 9 1 2 6 0 2 3 7 2 3 4 8 1
执行排序:
python
sorted_df = df.sort_values(by='C', ascending=True) print("排序后的DataFrame:") print(sorted_df)
输出:
A B C 1 2 6 0 3 4 8 1 2 3 7 2 0 1 5 9
在这个例子中:
- 列'C'的值从0到9进行了升序排序。
- 列'A'和列'B'的值则根据列'C'的排序结果进行相应的调整,但它们本身并没有单独进行排序。
因此,最终的排序结果中,列'C'的值是从小到大排列的,而列'A'和列'B'的值则是按照列'C'的排序顺序排列的。