2026-07-29 08:23:07
pandas是Python中用于数据分析的核心库,提供了Series和DataFrame两种基础数据结构。以下是对这两种数据结构基本操作的详细总结:
重新索引是根据新索引重新排列数据的过程。对于Series和DataFrame,reindex()方法都支持添加新的索引值,并在原数据中不存在该索引值时填充缺失值。
Series的reindex操作:
import pandas as pd# 创建一个Seriess = pd.Series([1, 2, 3], index=['a', 'b', 'c'])# 重新索引,添加新索引'd's_reindexed = s.reindex(['a', 'b', 'c', 'd'])print(s_reindexed)输出:
a 1.0b 2.0c 3.0d NaNdtype: float64可以使用fill_value参数指定填充值:
s_reindexed_filled = s.reindex(['a', 'b', 'c', 'd'], fill_value=0)print(s_reindexed_filled)输出:
a 1b 2c 3d 0dtype: int64还可以使用method参数进行前向填充(ffill)或后向填充(bfill):
s_reindexed_ffill = s.reindex(['a', 'b', 'c', 'd'], method='ffill')print(s_reindexed_ffill)输出:
a 1b 2c 3d 3dtype: int64DataFrame的reindex操作:
# 创建一个DataFramedf = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['x', 'y', 'z'])# 重新索引行df_reindexed_rows = df.reindex(['x', 'y', 'z', 'w'])print(df_reindexed_rows)# 重新索引列df_reindexed_cols = df.reindex(columns=['A', 'B', 'C'])print(df_reindexed_cols)输出:
A Bx 1.0 4.0y 2.0 5.0z 3.0 6.0w NaN NaN A B Cx 1 4.0 NaNy 2 5.0 NaNz 3 6.0 NaNdrop()方法用于删除Series或DataFrame中的指定行或列。
Series的drop操作:
# 删除索引为'a'的行s_dropped = s.drop('a')print(s_dropped)输出:
b 2c 3dtype: int64DataFrame的drop操作:
# 删除索引为'x'的行df_dropped_rows = df.drop('x')print(df_dropped_rows)# 删除列'A'df_dropped_cols = df.drop('A', axis=1)print(df_dropped_cols)输出:
A By 2 5z 3 6 Bx 4y 5z 6pandas提供了多种索引、选取和过滤数据的方法。
Series的索引和选取:
# 通过索引标签选取print(s['a'])# 通过切片选取print(s['a':'c'])# 通过布尔索引选取print(s[s > 1])输出:
1a 1b 2c 3dtype: int64b 2c 3dtype: int64DataFrame的索引和选取:
# 通过列名选取print(df['A'])# 通过行索引选取print(df.loc['x'])# 通过布尔索引选取print(df[df['A'] > 1])输出:
x 1y 2z 3Name: A, dtype: int64A 1B 4Name: x, dtype: int64 A By 2 5z 3 6pandas在进行算术运算时会自动对齐索引。
Series的算术运算:
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd'])# 算术运算print(s1 + s2)输出:
a NaNb 6.0c 8.0d NaNdtype: float64DataFrame的算术运算:
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}, index=['x', 'y'])df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]}, index=['y', 'z'])# 算术运算print(df1 + df2)输出:
A Bx NaN NaNy 7.0 11.0z NaN NaNpandas允许对Series或DataFrame应用自定义函数。
Series的函数应用:
# 应用lambda函数print(s.apply(lambda x: x * 2))# 应用自定义函数def square(x): return x 2print(s.apply(square))输出:
a 2b 4c 6dtype: int64a 1b 4c 9dtype: int64DataFrame的函数应用:
# 对每列应用函数print(df.apply(lambda x: x * 2))# 对每个元素应用函数print(df.applymap(lambda x: x * 2))输出:
A Bx 2 8y 4 10z 6 12 A Bx 2 8y 4 10z 6 12pandas提供了对Series和DataFrame进行排序的方法。
Series的排序:
# 按值排序print(s.sort_values())# 按索引排序print(s.sort_index())输出:
a 1b 2c 3dtype: int64a 1b 2c 3dtype: int64DataFrame的排序:
# 按列排序print(df.sort_values(by='A'))# 按索引排序print(df.sort_index())输出:
A Bx 1 3y 2 4 A Bx 1 3y 2 4pandas提供了对数据进行排名的方法。
# Series的排名print(s.rank())# DataFrame的排名print(df.rank())输出:
a 1.0b 2.0c 3.0dtype: float64 A Bx 1.0 1.0y 2.0 2.0八、带有重复值的轴索引pandas允许索引不唯一,即可以有重复的索引值。
# 创建带有重复索引的Seriess_dup = pd.Series([1, 2, 3, 4], index=['a', 'a', 'b', 'b'])print(s_dup)# 通过索引选取重复值print(s_dup['a'])输出:
a 1a 2b 3b 4dtype: int64a 1a 2dtype: int64通过以上操作,可以灵活地处理和分析数据。pandas的这些功能使得数据清洗、转换和分析变得更加高效和便捷。