当前位置: 首页 > news >正文

「pandas」Pandas 基本数据操作、 索引、赋值、排序

「pandas」Pandas 基本数据操作、 索引、赋值、排序


更多内容请关注本人【pandas】专栏


【目录】

  • 索引操作
  • 赋值操作
  • 排序操作
一、索引操作
score = np.random.randint(100, size=(6, 3))
names = ["同学1", "同学2", "同学3"]
period = ["期中", "期末"]
columns = ["语文", "英语", "数学"]
index = pd.MultiIndex.from_product([names, period])
df = pd.DataFrame(score, index=index, columns=columns)

print(df)

# 运行结果
			语文  英语  数学
同学1 期中    65    43    91
      期末     2     8     2
同学2 期中    22    44    87
      期末    68    43    17
同学3 期中     6     8    50
      期末    87    41    18
1.1 直接索引,行列索引(先行后列)
print(df['语文']['同学1'])	# 先行后列

# 运行结果
期中    65
期末     2
Name: 语文, dtype: int32
1.2 loc函数索引

基于标签的索引器,用于通过行标签和列标签选择数据。

参数:行索引,列索引

  • 单个标签(例如 df.loc['row_label', 'col_label']
  • 标签列表(例如 df.loc[['row1', 'row2'], ['col1', 'col2']]
  • 切片(例如 df.loc['row1':'row2', 'col1':'col2']
  • 布尔数组(例如 df.loc[df['col'] > 0]
# 单个标签
print(df["同学1", "语文"])

# 运行结果
期中    65
期末     2
Name: 语文, dtype: int32

# 标签列表
print(df.loc[["同学1", "同学2"], ["语文", "数学"]])

# 运行结果
            语文  数学
同学1 期中    65    91
      期末     2     2
同学2 期中    22    87
      期末    68    17

# 切片
print(df.loc["同学1":"同学2", "语文": "数学"])	# 从结果上看这个是闭区间

# 运行结果
            语文  英语  数学
同学1 期中    65    43    91
      期末     2     8     2
同学2 期中    22    44    87
      期末    68    43    17

# 布尔数组
print(df.loc[df["数学"] > 60])

# 运行结果
            语文  英语  数学
同学1 期中    65    43    91
同学2 期中    22    44    87
1.3 iloc函数索引

基于位置的索引器,用于通过行和列的整数位置选择数据

参数:行索引,列索引

  • 单个整数(例如 df.iloc[0, 1]
  • 整数列表(例如 df.iloc[[0, 1], [1, 2]]
  • 切片(例如 df.iloc[0:2, 1:3]
  • 布尔数组(例如 df.iloc[df['col'] > 0]
# 单个整数
print(df.iloc[0, 2], end='\n\n')

# 运行结果
91

# 整数列表
print(df.iloc[[0, 1], [1, 2]], end='\n\n')

# 运行结果
            英语  数学
同学1 期中    43    91
      期末     8     2
    

# 切片
print(df.iloc[0:2, 1:2], end='\n\n')

# 运行结果
            英语
同学1 期中    43
      期末     8
二、赋值操作
  • 修改单个值
  • 修改整列值
  • 修改多列
  • 添加新列
  • 使用条件赋值
  • apply、assign
  • 修改行数据
  • at、iat
  • mask和where
# DataFrame示例
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['x', 'y', 'z'])

# 运行结果
   A  B
x  1  4
y  2  5
z  3  6
2.1 修改单个值
# 使用 loc 修改单个值
df.loc['x', 'A'] = 10

# 使用 iloc 修改单个值
df.iloc[1, 1] = 20

# 运行结果
    A   B
x  10   4
y   2  20
z   3   6
2.2 修改整列值
df['A'] = [100, 200, 300]

# 运行结果
     A   B
x  100   4
y  200  20
z  300   6
2.3 修改多列
df[['A', 'B']] = [[1, 2], [3, 4], [5, 6]]

# 运行结果
   A  B
x  1  2
y  3  4
z  5  6
2.4 添加新列
df['C'] = [7, 8, 9]

# 运行结果
   A  B  C
x  1  2  7
y  3  4  8
z  5  6  9
2.5 使用条件赋值
# 将列 'A' 中大于 2 的值修改为 100
df.loc[df['A'] > 2, 'A'] = 100

# 运行结果
     A  B  C
x    1  2  7
y  100  4  8
z  100  6  9
2.6 apply、assign
  • apply
# 对列 'A' 的值加倍
df['A'] = df['A'].apply(lambda x: x * 2)

# 运行结果
     A  B  C
x    2  2  7
y  200  4  8
z  200  6  9
  • assign
  • assign 方法可以创建新列或覆盖现有列,并返回一个新的 DataFrame(原 DataFrame 不会被修改)。
# 添加新列 'D',其值为列 'A' 和 'B' 的和
df_new = df.assign(D=df['A'] + df['B'])

# 运行结果
     A  B  C    D
x    2  2  7    4
y  200  4  8  204
z  200  6  9  206
2.7 修改行数据
# 修改行 'x' 的所有值
df.loc['x'] = [10, 20, 30]

# 运行结果
     A   B   C
x   10  20  30
y  200   4   8
z  200   6   9
2.8 at、iat,用于快速访问和修改单个值的方法
  • at : 基于标签
  • iat : 基于位置
# 使用 at 修改单个值
df.at['x', 'A'] = 100

# 使用 iat 修改单个值
df.iat[1, 1] = 50

# 运行结果
     A   B   C
x  100  20  30
y  200  50   8
z  200   6   9
2.9 mask 和 where 赋值
  • mask:将满足条件的值替换为指定值。
  • where:将不满足条件的值替换为指定值。
# 使用 mask 将列 'A' 中大于 100 的值替换为 -1
df['A'] = df['A'].mask(df['A'] > 100, -1)

# 使用 where 将列 'B' 中小于等于 20 的值替换为 -1
df['B'] = df['B'].where(df['B'] > 20, -1)

# 运行结果
     A   B   C
x  100  -1  30
y   -1  50   8
z   -1  -1   9
三、Series、 DataFrame 排序
  • Series

    • 对象.sort_index(ascending=True, inplace=False)
    • 对象.sort_values(ascending=True, inplace=False, na_position=‘last’)
  • DataFrame

    • 对象.sort_index(axis=0, ascending=True, inplace=False)
    • 对象.sort_values(by, ascending=True, inplace=False, na_position=‘last’)
  • 参数解释:

    • ascending : 升序, 默认 True
    • inplace : 原地修改, 默认False, 则返回一个新的对象
    • na_position: 缺失值的位置,'last'(默认)或 'first'
    • by:排序依据的列名或列名列表。
3.1 Series 排序
s = pd.Series([3, 1, 4, 1, 5], index=['a', 'b', 'c', 'd', 'e'])

# 按值升序排序
sorted_s = s.sort_values()

# 运行结果
b    1
d    1
a    3
c    4
e    5
dtype: int64

# 按索引降序排序
sorted_s = s.sort_index(ascending=False)
e    5
d    1
c    4
b    1
a    3
dtype: int64
3.2 DataFrame 排序
  • 单列排序
  • 多列排序
df = pd.DataFrame({
    'A': [3, 1, 4, 1, 5],
    'B': [9, 2, 5, 3, 8],
    'C': [7, 6, 8, 4, 2]
})

# 按单列 'A' 升序排序
sorted_df = df.sort_values(by='A')

# 运行结果
   A  B  C
1  1  2  6
3  1  3  4
0  3  9  7
2  4  5  8
4  5  8  2

# 多列排序 按列 'A' 升序,列 'B' 降序排序
sorted_df = df.sort_values(by=['A', 'B'], ascending=[True, False])

# 运行结果
   A  B  C
3  1  3  4
1  1  2  6
0  3  9  7
2  4  5  8
4  5  8  2

# 按行索引降序排序
sorted_df = df.sort_index(ascending=False)

# 运行结果
   A  B  C
4  5  8  2
3  1  3  4
2  4  5  8
1  1  2  6
0  3  9  7
3.3 处理缺失值

在排序时,可以通过 na_position 参数控制缺失值的位置。

# 创建一个包含缺失值的 DataFrame
df = pd.DataFrame({
    'A': [3, 1, None, 1, 5],
    'B': [9, 2, 5, 3, 8]
})

# 按列 'A' 排序,缺失值放在最前面
sorted_df = df.sort_values(by='A', na_position='first')

# 运行结果
     A  B
2  NaN  5
1  1.0  2
3  1.0  3
0  3.0  9
4  5.0  8

相关文章:

  • 网络工程师 (45)网际控制报文协议ICMP
  • blackbox.ai 一站式AI代理 畅享顶级模型
  • 如何使用 vxe-table grid 全配置式给单元格字段格式化内容,格式化下拉选项内容
  • MybatisPlus-扩展功能
  • Axure RP11 新功能:为设计师插上“翅膀”
  • Low code web framework for real world applications, in Python and Javascript
  • 基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • Android JNI的理解与使用。
  • 获取某厂招聘岗位信息
  • linux 面试题
  • 后台管理系统-项目初始化
  • 网络编程(24)——实现带参数的http-get请求
  • Linux 文件内容查看
  • 力扣LeetCode: 740 删除并获得点数
  • 机器视觉--图像的运算(乘法)
  • EXCEL解决IF函数“您已为此函数输入太多个参数”的报错
  • 12. Docker 网络(bridge,host,none,container,自定义网络)配置操作详解
  • 通读【基于深度学习的网络异常流量检测研究与系统实现】
  • Django 5实用指南(二)项目结构与管理
  • 【R语言】主成分分析与因子分析
  • 娱见 | 为了撕番而脱粉,内娱粉丝为何如此在乎番位
  • 十大券商看后市|A股风险偏好有回升空间,把握做多窗口
  • 韩国总统选举民调:共同民主党前党首李在明支持率超46%
  • 国内外数十支搜救犬队伍齐聚三明,进行废墟搜救等实战
  • 俄罗斯期望乌克兰在停火期间采取行动缓和局势
  • 英国地方选举结果揭晓,工党保守党皆受挫