在python中按数字对字符串列表进行排序

时间:2018-07-10 08:50:04

标签: python pandas csv

我确实想读取一些.csv文件并打印第5列的最小值和最大值。我还想打印可以在其中找到最大值或最小值的文件。

我的代码现在是:

import pandas, glob
import numpy as np

path = "/home/path/to/log/"

fn = glob.glob(path + "*.csv") 
list_of_dfs = [pandas.read_csv(filename, header=None) for filename in fn]
k = len(list_of_dfs)
b = np.zeros((k, 1))
cnt = 0 
for i in list_of_dfs:
    b[cnt,0] = np.min(i[4])
    cnt = cnt + 1
print(np.min(b[:,0]))
print(np.argmin(b[:,0]))

我的.csv文件的命名如下:

0.csv,1.csv ... 10.csv ... 2463.csv

看到我的argmin没有显示正确的文件后,我意识到fn没有排序。我找到了这个Sort filenames in directory in ascending order,解决方法是:

fn.sort(key=lambda f: int(filter(str.isdigit, f)))

但是在这一行中,出现以下错误:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'filter'

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

我认为需要sorted并将文件名转换为integer s:

fn = ['0.csv', '1.csv', '2463.csv', '10.csv']

fn = sorted(fn, key=lambda f: int(f.split('.')[0]))
print (fn)
['0.csv', '1.csv', '10.csv', '2463.csv']

如果有完整路径:

print (fn)
['files\\1.csv', 'files\\10.csv', 'files\\2.csv']

fn = sorted(fn, key=lambda f: int(os.path.basename(f).split('.')[0]))
print (fn)
['files\\1.csv', 'files\\2.csv', 'files\\10.csv']
相关问题