Python去除非整数行,并转换为整数

0 投票
2 回答
998 浏览
提问于 2025-04-18 08:49

有没有简单的方法可以删除那些包含非整数值的行,然后把字符串转换成整数,最后进行升序排序?我有一个数据集(只有一列,应该是记录数字),里面有一些我想去掉的字符串。这个代码看起来能正常工作,但排序的时候好像把“浮点数”当成了“字符串”来处理。例如,记录数字的排序结果是这样的:

0
1
2
200000000
201
3

代码:

import pandas

with open('GridExport.csv') as incsv:
    df1 = pandas.read_csv(incsv,  usecols=['Record Number'])
    cln = pandas.DataFrame()
    cln['Record Number'] = [x for x in df1['Record Number'] if x.isdigit()]
    cln.astype(float)
    print(cln.sort(['Record Number']))

有没有办法在不先转换成浮点数的情况下做到这一点?我想去掉那些不符合int64格式的数字。

2 个回答

0

你可以把所有的字符串元素转换成浮点数元素,然后用下面的方法进行排序。

    def numeric_compare(x, y):
    return float(x)-float(y)

>>> sorted(['10.0','2000.0','30.0'],cmp=numeric_compare)
['10.0', '30.0', '2000.0']
0

你代码中的问题是这一行

cln['Record Number'].astype(float)

并没有改变数据框的内容。因此,它把这一列当成字符串类型来处理,并按照字符串的方式进行排序。如果你在执行完这行代码后打印一下 cln['Record Number'].dtype,就能看出这一点。如果你想要修改它,你需要进行赋值操作

cln['Record Number'] = cln['Record Number'].astype(float)

撰写回答