Pandas 是一个强大的 Python 数据分析工具库,它提供了许多便利的数据结构和数据操作方法。以下是一些常见的 Pandas 基础操作:
-
导入 Pandas 库:
import pandas as pd -
创建 DataFrame:
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'Paris', 'London']} df = pd.DataFrame(data) -
读取和写入数据:
- 从 CSV 文件读取数据:
df = pd.read_csv('filename.csv') - 将 DataFrame 写入 CSV 文件:
df.to_csv('filename.csv', index=False)
- 从 CSV 文件读取数据:
-
查看数据:
- 显示前几行数据(默认前 5 行):
df.head() - 显示后几行数据(默认后 5 行):
df.tail()
- 显示前几行数据(默认前 5 行):
-
数据选择和索引:
- 通过列名选择数据:
ages = df['Age'] - 使用
.loc通过标签选择数据:specific_data = df.loc[1, 'Name'] - 使用
.iloc通过位置选择数据:specific_data = df.iloc[1, 1] # 第二行第二列
- 通过列名选择数据:
-
数据过滤:
- 根据条件筛选数据:
filtered_data = df[df['Age'] > 30]
- 根据条件筛选数据:
-
数据排序:
- 按某列值排序:
sorted_df = df.sort_values(by='Age', ascending=False)
- 按某列值排序:
-
缺失值处理:
- 检查数据中的缺失值:
df.isnull() - 填充缺失值:
df_filled = df.fillna(value=0) - 删除含有缺失值的行:
df_dropped = df.dropna()
- 检查数据中的缺失值:
-
数据统计:
- 计算平均值、中位数等统计数据:
mean_age = df['Age'].mean() median_age = df['Age'].median()
- 计算平均值、中位数等统计数据:
-
数据聚合:
- 分组和聚合数据:
grouped_data = df.groupby('City').sum()
- 分组和聚合数据:
1.索引操作
Pandas 中的索引操作主要包括创建索引、设置索引、重置索引、多级索引(层次化索引)的操作等。下面详细介绍这些基本的索引操作:
创建和设置索引
-
创建索引:
当你创建一个 DataFrame 时,Pandas 默认会给每行分配一个从 0 开始的整数索引。你也可以在创建时指定索引:df = pd.DataFrame(data, index=['row1', 'row2', 'row3']) -
设置已有列为索引:
你可以将 DataFrame 中的一列或多列设置为索引:df.set_index('Name', inplace=True)
访问数据
-
使用
.loc[]和.iloc[]:.loc[]用于基于标签的索引。.iloc[]用于基于整数位置的索引。
例如:
# 使用.loc访问 data = df.loc['Alice']# 使用.iloc访问 data = df.iloc[0]
重置索引
- 重置索引:
使用reset_index()可以把索引重置为默认的整数索引,原来的索引会变成一列数据:df.reset_index(inplace=True)
多级索引(层次化索引)
-
创建多级索引:
当数据在更多维度上有层次结构时,可以使用多级索引。arrays = [['a', 'a', 'b', 'b'], [1, 2, 1, 2]] index = pd.MultiIndex.from_arrays(arrays, names=('letter', 'number')) df = pd.DataFrame({'data': [10, 20, 30, 40]}, index=index) -
访问多级索引的数据:
# 访问外层索引 df.loc['a']# 访问内层索引 df.loc[('a', 1)] -
重排多级索引:
使用reorder_levels调整索引层次的顺序:df.reorder_levels(['number', 'letter'])
2.统计计算
在 Pandas 中,统计计算是分析数据的基础,提供了快速的、简洁的数据汇总功能。这里列举一些常用的统计计算方法,帮助你理解和利用 Pandas 进行数据分析。
基本统计计算
-
描述统计:
describe()方法可以快速查看数据的基本统计量,如均值、标准差、最小值、四分位数等。df.describe() -
均值:
使用mean()方法计算数值列的平均值。df['Age'].mean() -
中位数:
使用median()方法计算数值列的中位数。df['Age'].median() -
最大值和最小值:
使用max()和min()方法计算数值列的最大值和最小值。max_value = df['Age'].max() min_value = df['Age'].min() -
标准差和方差:
使用std()和var()方法计算数值列的标准差和方差,这有助于了解数据的离散程度。std_dev = df['Age'].std() variance = df['Age'].var() -
计数:
使用count()方法统计非空值的数量。count = df['Age'].count() -
求和:
使用sum()方法计算数值列的总和。total = df['Age'].sum()
高级统计计算
-
相关系数:
使用corr()方法计算列与列之间的相关系数,了解变量之间的线性关系。correlation_matrix = df.corr() -
协方差:
使用cov()方法计算列与列之间的协方巧。covariance_matrix = df.cov() -
唯一值和值计数:
使用unique()和value_counts()方法获取列中的唯一值和这些值的出现次数。unique_values = df['City'].unique() value_counts = df['City'].value_counts() -
累计统计:
使用cumsum()、cumprod()、cummax()和cummin()等方法计算累积和、累积积、累积最大值和累积最小值。cumulative_sum = df['Age'].cumsum() cumulative_max = df['Age'].cummax()
3.位置计算
在 Pandas 中进行位置计算主要涉及到找出数据中特定元素的位置或进行基于位置的操作。这些计算通常使用以下几种方法:
1. idxmax() 和 idxmin()
这两个函数用于找出数据中最大值或最小值的索引位置。
# 找出最大值的位置
max_index = df['Age'].idxmax()# 找出最小值的位置
min_index = df['Age'].idxmin()
2. argmax() 和 argmin()
这些函数通常用于 Numpy 数组,但也可以在 Pandas 的 Series 对象中使用,来找到最大值和最小值的位置(相对于数组的位置,而不是 DataFrame 的标签索引)。
# 使用 argmax
max_position = df['Age'].values.argmax() # 需要转换为 Numpy 数组# 使用 argmin
min_position = df['Age'].values.argmin() # 需要转换为 Numpy 数组
3. nlargest() 和 nsmallest()
这些方法用于获取列中最大或最小的 n 个值。
# 获取最大的3个值
largest_values = df['Age'].nlargest(3)# 获取最小的3个值
smallest_values = df['Age'].nsmallest(3)
4. sort_values() 和位置访问
通过排序和位置索引来获取特定位置的数据。
# 先排序,然后通过位置访问
sorted_df = df.sort_values(by='Age')
specific_data = sorted_df.iloc[0] # 获取排序后的第一行数据
5. 使用 .iloc[]
直接通过位置来索引数据。
# 访问第三行第二列的数据
element = df.iloc[2, 1]
4.数据选择
在 Pandas 中,数据选择是一项基础且常用的操作,它允许你基于行、列或条件过滤来访问数据集中的特定部分。以下是一些常用的数据选择方法:
1. 选择列
你可以通过列名直接选择列,这是最简单的方法:
# 选择单列
ages = df['Age']# 选择多列
subset = df[['Name', 'City']]
2. 使用 .loc[] 和 .iloc[]
.loc[]:基于标签的索引,可以用来选择特定的行和列。
# 选择单个元素
name = df.loc[1, 'Name']# 选择行和列的子集
subset = df.loc[0:2, ['Name', 'Age']]
.iloc[]:基于整数位置的索引,用于选择行和列的子集。
# 选择单个元素
name = df.iloc[1, 0]# 选择行和列的子集
subset = df.iloc[0:3, 0:2]
3. 布尔索引
通过布尔索引,你可以根据条件过滤数据:
# 选择年龄大于 30 的所有行
over_30 = df[df['Age'] > 30]# 多条件选择,使用 & (和) 或 | (或)
young_in_ny = df[(df['Age'] < 30) & (df['City'] == 'New York')]
4. 使用 .query()
.query() 方法提供了一种更易读的方式来选择数据:
# 使用 query 选择数据
over_30 = df.query('Age > 30')
young_in_ny = df.query('Age < 30 and City == "New York"')
5. 使用切片
对于行的选择,你也可以使用切片语法,尤其是在 .iloc[] 中:
# 选择前三行
first_three_rows = df[:3]# 使用 .iloc 进行切片选择
rows = df.iloc[1:4]
6. 条件赋值
你可以根据条件来修改 DataFrame 的部分数据:
# 将所有年龄大于 30 的人的城市改为 "Berlin"
df.loc[df['Age'] > 30, 'City'] = 'Berlin'