【问题标题】:python drop non-integer rows, convert to intpython删除非整数行,转换为int
【发布时间】:2014-07-27 05:23:20
【问题描述】:

有没有一种简单的方法来删除包含非整数单元格值的行,然后/并将字符串转换为整数,然后升序排序?我有包含要删除的字符串的数据集(应该只是记录编号的单列)。这段代码似乎可以工作,但排序似乎就像“float”是“string”一样。例如,记录编号是这样排序的:

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 的数字

【问题讨论】:

    标签: python string sorting pandas integer


    【解决方案1】:

    您可以将所有字符串元素转换为浮点元素,并按照以下方法进行排序

        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']
    

    【讨论】:

      【解决方案2】:

      您的代码中的问题是该行

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

      不修改数据框。因此,它将列视为字符串类型并相应地对其进行排序。如果您打印cln['Record Number'].dtype 声明之后,应该说清楚。 如果你想修改它,你应该做分配

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

      【讨论】:

      • 有没有办法从原始输入 df1 中删除非整数而不是制作新系列?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 2019-12-29
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多