如何在Python中按多列对CSV进行排序?

如何在Python中按多列对CSV进行排序?

CSV(Comma Separated Values)文件是一种常见的数据格式,具有易读的特点,并能够被大多数数据处理工具所支持。在数据处理过程中,我们通常需要对CSV文件进行排序。而对于多维数据的CSV文件,我们需要按照多列进行排序。

Python作为一种高级编程语言,提供了许多标准库和第三方库,使得对CSV文件进行排序相对容易。本文将介绍在Python中按照多列对CSV文件进行排序的方法。

阅读更多:Python 教程

准备工作

首先,我们需要安装Python的pandas库和numpy库。

pip install pandas
pip install numpy

为了演示如何排序,我们可以先创建一个包含多列数据的CSV文件,例如,我们创建一个包含三列数据的CSV文件,命名为sample.csv。

import csv

# 创建一个包含多列数据的CSV文件
with open('sample.csv', mode='w', newline='') as file:
    writer = csv.writer(file, delimiter=',')
    writer.writerow(['name', 'age', 'city'])
    writer.writerow(['Tom', 30, 'New York'])
    writer.writerow(['Jack', 25, 'Chicago'])
    writer.writerow(['Lucy', 35, 'San Francisco'])
    writer.writerow(['David', 22, 'Boston'])

然后,我们可以通过Pandas库中的read_csv函数将CSV文件读取为DataFrame对象。

import pandas as pd

# 读取CSV文件为DataFrame对象
df = pd.read_csv('sample.csv')
print(df)

输出结果如下:

    name  age           city
0    Tom   30       New York
1   Jack   25        Chicago
2   Lucy   35  San Francisco
3  David   22         Boston

按单列排序

默认情况下,Pandas库中的sort_values函数可按单列对DataFrame进行排序。我们可以使用sort_values函数来根据年龄(age)列进行排序。

# 按年龄(age)列进行升序排序
df = df.sort_values('age')
print(df)

输出结果如下:

    name  age           city
3  David   22         Boston
1   Jack   25        Chicago
0    Tom   30       New York
2   Lucy   35  San Francisco

我们可以使用ascending参数设置为False来进行降序排序。

# 按年龄(age)列进行降序排序
df = df.sort_values('age', ascending=False)
print(df)

输出结果如下:

    name  age           city
2   Lucy   35  San Francisco
0    Tom   30       New York
1   Jack   25        Chicago
3  David   22         Boston

按多列排序

如果我们需要按多列进行排序,则需要在sort_values函数中指定多个列名。例如,我们想先按照所在城市(city)升序排序,再按照年龄(age)降序排序,则可以这样做:

# 按城市(city)升序排序,再按年龄(age)降序排序
df = df.sort_values(['city', 'age'], ascending=[True, False])
print(df)

输出结果如下:

    name  age           city
3  David   22         Boston
1   Jack   25        Chicago
2   Lucy   35  San Francisco
0    Tom   30       New York

我们也可以使用sort_values函数中的na_position参数来指定缺失值出现的位置。例如,我们想将缺失值放在排序结果的最后,则可以这样做:

# 按城市(city)升序排序,再按年龄(age)降序排序
# 将缺失值放在排序结果的最后
df = df.sort_values(['city', 'age'], ascending=[True, False], na_position='last')
print(df)

输出结果如下:

    name   age           city
3  David  22.0         Boston
1   Jack  25.0        Chicago
2   Lucy  35.0  San Francisco
0    Tom  30.0       New York

小结

在Python中,按多列对CSV进行排序是一项非常常见的任务。借助Pandas库,我们可以轻松地通过sort_values函数对CSV文件进行排序。使用sort_values函数的关键是在函数中指定多个列名,并通过ascending参数指定每个列名的排序方式。同时,我们也可以使用na_position参数来指定缺失值的排序位置。

完整代码如下:

import csv
import pandas as pd

# 创建一个包含多列数据的CSV文件
with open('sample.csv', mode='w', newline='') as file:
    writer = csv.writer(file, delimiter=',')
    writer.writerow(['name', 'age', 'city'])
    writer.writerow(['Tom', 30, 'New York'])
    writer.writerow(['Jack', 25, 'Chicago'])
    writer.writerow(['Lucy', 35, 'San Francisco'])
    writer.writerow(['David', 22, 'Boston'])

# 读取CSV文件为DataFrame对象
df = pd.read_csv('sample.csv')
print(df)

# 按年龄(age)列进行升序排序
df = df.sort_values('age')
print(df)

# 按年龄(age)列进行降序排序
df = df.sort_values('age', ascending=False)
print(df)

# 按城市(city)升序排序,再按年龄(age)降序排序
df = df.sort_values(['city', 'age'], ascending=[True, False])
print(df)

# 按城市(city)升序排序,再按年龄(age)降序排序
# 将缺失值放在排序结果的最后
df = df.sort_values(['city', 'age'], ascending=[True, False], na_position='last')
print(df)

输出结果如下:

    name  age           city
0    Tom   30       New York
1   Jack   25        Chicago
2   Lucy   35  San Francisco
3  David   22         Boston

    name  age           city
3  David   22         Boston
1   Jack   25        Chicago
0    Tom   30       New York
2   Lucy   35  San Francisco

    name  age           city
2   Lucy   35  San Francisco
0    Tom   30       New York
1   Jack   25        Chicago
3  David   22         Boston

    name  age           city
3  David   22         Boston
1   Jack   25        Chicago
2   Lucy   35  San Francisco
0    Tom   30       New York

    name   age           city
3  David  22.0         Boston
1   Jack  25.0        Chicago
2   Lucy  35.0  San Francisco
0    Tom  30.0       New York

以上就是在Python中按多列对CSV进行排序的方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程