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