Python---数据分析(Pandas九:二维数组DataFrame数据操作二: 数据排序,数据筛选,数据拼接)

一、数据排序

1.1、 sort_values()

用于根据一个或多个列的值对 DataFrame 进行排序。

python 复制代码
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)

| 描述 | 说明 |
| by | 用于排序的列名或列名列表。 |
| axis | {0 or 'index', 1 or 'columns'},默认为 0。沿着哪个轴进行排序。 |
| ascending | 排序的方向,True表示升序,False表示降序, 默认为True。 |
| inplace | 是否在原地修改 DataFrame。 |
| kind | {'quicksort', 'mergesort', 'heapsort', 'stable'},默认为 'quicksort'。排序 算法。 |
| na_position | {'first', 'last'},默认为 'last'。缺失值的放置位置。 |
| ignore_index | 布尔值,默认为 False。是否忽略原来的索引,重新生成一个 新的默认整数索引。 |

key 函数,默认为None。应用于 by 中每个列的函数,排序将基于函数的返回 值。
python 复制代码
import numpy as np
import pandas as pd

# 创建一个示例 DataFrame
df = pd.DataFrame({
    'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
    'col2': [2, 1, 9, 8, 7, 4],
    'col3': [3, 1, 9, 4, 2, 3],
    'col4': ['a', 'B', 'c', 'D', 'e', 'F']
})

# 打印原始DataFrame
print(df)

# 根据 'col1' 列对DataFrame进行排序
res1 = df.sort_values(by=['col1'])
# 打印排序后的DataFrame
print(res1)

# 根据 'col1' 和 'col2' 列对DataFrame进行排序
res2 = df.sort_values(by=['col1', 'col3'])
# 打印排序后的DataFrame
print(res2)

1.2、sort_index()

用于根据索引对 DataFrame 进行排序。

python 复制代码
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)

| 描述 | 说明 |
| axis | {0 or 'index', 1 or 'columns'},默认为 0。表示沿着哪个轴进行排序。0按 照行标签排序,1按照列标签排序。 |
| level | 如果索引是多级索引,指定要排序的级别。可以是整数或整数列表。 |
| ascending | 默认为 True。表示排序是升序还是降序。 |
| inplace | 是否在原地修改 DataFrame。 |
| kind | {'quicksort', 'mergesort', 'heapsort', 'stable'},默认为 'quicksort'。排序 算法。 |
| na_position | {'first', 'last'},默认为 'last'。缺失值的放置位置。 |
| sort_remaining | 是否对剩余的级别进行排序。仅在多级索引时有效。默认值为True。 |
| ignore_index | 是否忽略原来的索引,重新生成一个新的默认整数索引。默认值 为 False。 |

key 函数,默认为 None。应用于索引的函数,排序将基于函数的返回值。
python 复制代码
import pandas as pd
import numpy as np

# 创建一个多级索引的DataFrame
arrays = [np.array(['qux', 'qux', 'foo', 'foo']),
          np.array(['two', 'one', 'two', 'one'])]
df = pd.DataFrame({'C': [1, 2, 3, 4], 'B': [4, 3, 2, 1]}, index=arrays)

print(df)

# # 按第一层索引升序排序
df_sorted_by_first_level = df.sort_index(level=0)
print(df_sorted_by_first_level)

# # 按第二层索引降序排序
df_sorted_by_second_level_desc = df.sort_index(level=1, ascending=False)
print(df_sorted_by_second_level_desc)

# 按整个索引升序排序
df_sorted_by_full_index = df.sort_index()
print(df_sorted_by_full_index)

二、 数据筛选

可以使用布尔数组进行索引,选择满足条件的数据。

python 复制代码
import pandas as pd

data = {
    '姓名': ['小明', '小红', '小刚'],
    '年龄': [20, 18, 22],
    '成绩': [85, 90, 88]
}

df = pd.DataFrame(data)

print(df)

print(df['成绩'] >= 90)

# 使用布尔索引选择成绩大于或等于90的学生
high_scores = df[df['成绩'] >= 90]

print(high_scores)

三、数据拼接

3.1、 concat()

用于沿一个轴将多个 pandas 对象连接在一起。

python 复制代码
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

| 描述 | 说明 |
| objs | 要连接的对象列表。 |
| axis | {0, 1, 'index', 'columns'},默认为 0。 |
| join | 连接方式。可以是: 'outer':取所有索引的并集。 'inner':取所有索引的交集。 |
| ignore_index | 是否忽略原来的索引,重新生成一个新的默认整数索引。默认值 为 False。 |
| keys | 用于生成多级索引的键列表。每个键对应一个对象。 |
| levels | 用于多级索引的级别列表。通常与 华清远见|元宇宙实验中心 yyzlab.com.cn keys 一起使用。 |
| names | 用于多级索引的名称列表。通常与 keys 一起使用。 |
| verify_integrity | 是否验证最终的 DataFrame 是否有重复的索引。默认值为False |
| sort | 是否对结果按照列名进行升序排序。默认值为 False。 |

copy 是否复制数据。
python 复制代码
import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])

df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
                    'B': ['B4', 'B5', 'B6', 'B7'],
                    'C': ['C4', 'C5', 'C6', 'C7'],
                    'F': ['F4', 'F5', 'F6', 'F7']},
                   index=[4, 5, 6, 7])

print(df1)
print(df2)

# 沿着竖直方向拼接两个DataFrame
result = pd.concat([df1, df2], axis=1, join='outer')

print(result)

3.2、 merge()

用于根据一个或多个键将两个 DataFrame 对象连接起来。

python 复制代码
DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=None, indicator=False, validate=None)

| 描述 | 说明 |
| right | 另一个 DataFrame 对象。 |
| how | {'left', 'right', 'outer', 'inner', 'cross'}, 默认为 'inner'。确定连接的类型: 'left': 使用左侧(调用 merge的 DataFrame)的索引进行左连接。 'right': 使用右侧(参数 right 中的 DataFrame)的索引进行右连接。 'outer': 使用两个DataFrame的并集连接。 'inner': 使用两个DataFrame的交集连接。 |
| on | 用于合并的列名。如果 left_on 和 right_on 都没有指定,则使用on |
| left_on | 左侧 DataFrame 中用于合并的列名。不与on同时使用。 |
| right_on | 右侧 DataFrame 中用于合并的列名。不与on同时使用。 |
| left_index | 是否使用左侧 DataFrame 的索引作为合并键。默认值为 False。不与on同时使用。 |
| right_index | 是否使用右侧 DataFrame 的索引作为合并键。默认值为 False。不与on同时使用。 |
| sort | 是否对结果进行排序。默认值为 False。 |
| suffixes | 用于重命名重复列的后缀。默认值为 ('_x', '_y')。 |
| copy | 是否复制数据。默认值为 None,表示根据需要自动决定是否复制。 |
| indicator | 是否添加一个指示器列,显示每行来自哪个DataFrame。默认值为 False。 |

validate 检查合并键。可以是: 'one_to_one':检查合并键在两者中是否唯一。 'one_to_many':检查合并键在左侧是否唯一。 'many_to_one':检查合并键在右侧是否唯一。 'many_to_many':不检查。
python 复制代码
import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({'key1': ['A', 'B', 'C', 'D'],
                    'value': [1, 2, 3, 4]}, index=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame({'key2': ['B', 'D', 'D', 'E'],
                    'value': [5, 6, 7, 8]}, index=['a', 'c', 'e', 'f'])

print(df1)
print(df2)

# 使用内连接(inner join)合并两个 DataFrame
result = df1.merge(df2, left_on='key1', right_on='key2', how='right', suffixes=('_left', '_right'), indicator=True,)

print(result)

3.3、 join()

用于将两个对象的列连接起来。

python 复制代码
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False, validate=None)

| 描述 | 说明 |
| other | 另一个 DataFrame 对象。 |
| on | 用于连接的列名。 |
| how | {'left', 'right', 'outer', 'inner'}, 默认为 'left'。确定连接的类型: 'left': 使用左侧(调用 join 的 DataFrame)的索引进行左连接。 'right': 使用右侧(参数 other 中的 DataFrame)的索引进行右连接。 'outer': 使用两个 DataFrame 的索引的并集进行全外连接。 'inner': 使用两个 DataFrame 的索引的交集进行内连接。 |
| lsuffix | 用于重命名重复列的左后缀。默认值为空字符串 ''。 |
| rsuffix | 用于重命名重复列的右后缀。默认值为空字符串 ''。 |
| sort | 是否对结果进行排序。默认值为 False。 |

validate 检查合并键。可以是: 'one_to_one':检查合并键在两者中是否唯一。 'one_to_many':检查合并键在左侧是否唯一。 'many_to_one':检查合并键在右侧是否唯一。 'many_to_many':不检查。
python 复制代码
import pandas as pd
 
# 创建两个 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                    'value': [1, 2, 3, 4]},
                   index=['k0', 'k1', 'k2', 'k3'])
df2 = pd.DataFrame({'value': [5, 6, 7, 8]},
                   index=['k1', 'k2', 'k3', 'k4'])
 
print(df1)
print(df2)
 
# 使用左连接(left join)根据索引合并两个 DataFrame
result = df1.join(df2, how='left', rsuffix='_right', lsuffix='_left')
 
print(result)

相关推荐
一问三不知_31 分钟前
pyqt5报错:qt.qpa.plugin: Could not find the Qt platform plugin “xcb“(已解决)
开发语言·python·qt·ubuntu·conda·bug
赛卡31 分钟前
自动驾驶背后的数学:ReLU,Sigmoid, Leaky ReLU, PReLU,Swish等激活函数解析
人工智能·pytorch·python·神经网络·机器学习·数学建模·自动驾驶
小白的高手之路36 分钟前
Pytorch中的数据加载
开发语言·人工智能·pytorch·python·深度学习·机器学习
Fansv58743 分钟前
深度学习框架PyTorch——从入门到精通(6.2)自动微分机制
人工智能·pytorch·经验分享·python·深度学习·机器学习
墨绿色的摆渡人1 小时前
用 pytorch 从零开始创建大语言模型(六):对分类进行微调
人工智能·pytorch·python·深度学习·语言模型·embedding
在街角开家咖啡店1 小时前
python总结
经验分享·笔记·python
Dxy12393102161 小时前
python如何提取html中所有的图片链接
数据库·python·html
Karl_zhujt1 小时前
Python深浅拷贝
python
豆芽8191 小时前
二项式分布(Binomial Distribution)
人工智能·python·机器学习·numpy·概率论
rundreamsFly2 小时前
【云馨AI-大模型】大模型的开发和应用中,Python、PyTorch和vLLM关系概括
人工智能·pytorch·python