利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
最新回答
善良乀゛の死神

2026-07-29 08:23:07

pandas是Python中用于数据分析的核心库,提供了Series和DataFrame两种基础数据结构。以下是对这两种数据结构基本操作的详细总结:

  • Series:一维带标签数组,可存储任何数据类型。
  • DataFrame:二维表格型数据结构,可看作由多个Series组成的字典,每列数据类型可不同。
一、重新索引(reindex)

重新索引是根据新索引重新排列数据的过程。对于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: int64
  • DataFrame的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 NaN
二、丢弃数据(drop)

drop()方法用于删除Series或DataFrame中的指定行或列。

  • Series的drop操作:

    # 删除索引为'a'的行s_dropped = s.drop('a')print(s_dropped)

    输出:

    b 2c 3dtype: int64
  • DataFrame的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 6
三、索引、选取和过滤

pandas提供了多种索引、选取和过滤数据的方法。

  • Series的索引和选取:

    # 通过索引标签选取print(s['a'])# 通过切片选取print(s['a':'c'])# 通过布尔索引选取print(s[s > 1])

    输出:

    1a 1b 2c 3dtype: int64b 2c 3dtype: int64
  • DataFrame的索引和选取:

    # 通过列名选取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 6
四、算术运算和数据对齐

pandas在进行算术运算时会自动对齐索引。

  • 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: float64
  • DataFrame的算术运算:

    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 NaN
五、函数应用和映射

pandas允许对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: int64
  • DataFrame的函数应用:

    # 对每列应用函数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 12
六、排序

pandas提供了对Series和DataFrame进行排序的方法。

  • Series的排序:

    # 按值排序print(s.sort_values())# 按索引排序print(s.sort_index())

    输出:

    a 1b 2c 3dtype: int64a 1b 2c 3dtype: int64
  • DataFrame的排序:

    # 按列排序print(df.sort_values(by='A'))# 按索引排序print(df.sort_index())

    输出:

    A Bx 1 3y 2 4 A Bx 1 3y 2 4
七、排名

pandas提供了对数据进行排名的方法。

# 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的这些功能使得数据清洗、转换和分析变得更加高效和便捷。