【问题标题】:Python pandas shows all ints in csv as floatsPython pandas 将 csv 中的所有整数显示为浮点数
【发布时间】:2020-07-23 23:08:26
【问题描述】:

我想验证 CSV 中的值是否为 integers,如果不是则报告错误。作为一个业余爱好者,我想我已经知道用户是否输入了“8k”或其他任何值作为值:

    try:
        int(value)
    except ValueError:
        print("No Deal, Howie!")

我完全忽略了用户可以进入 8.8 的可能性,这也是不可接受的。不幸的是,我不能使用:

if type(value) == int

因为 pandas 数据框将我 CSV 中的所有 ints 转换为 numpy.float64。我该怎么办?

【问题讨论】:

  • 使用.read_csv时,有一个dtype参数来指定列类型。
  • 你昨天问了几乎同样的问题。 stackoverflow.com/questions/63043034/… 这个问题的答案不适合你吗?
  • 不幸的是,没有人回答我的问题,克雷格。只是让我更加困惑。 Buuuuut,.is_integer() 起作用了!所以谢谢你 Alollz :) ...我似乎无法在我的谷歌搜索 Craig 中找到该链接,但感谢您提供的链接。

标签: python python-3.x pandas csv


【解决方案1】:

这是一个非常安全的方法,可以捕获一堆不同的整数类型。

import numpy as np

def num_is_int(x):
    if isinstance(x, (int, np.integer)):
        return True
    else:
        try:
            return x.is_integer()
        except AttributeError:
            return False

num_is_int(7)
True

num_is_int(7.0)
True

num_is_int(np.int16(7))
True

num_is_int(7.1)
False

num_is_int('7')
False

num_is_int(None)
False

【讨论】:

  • 不错。我刚刚得知float 有方法is_integer :) +1
【解决方案2】:

你可以像这样使用int():

if value == int(value)

【讨论】:

  • 它永远是float
  • @juanpa.arrivillaga 谢谢。
【解决方案3】:

要检查值是否为整数,您可以将其转换为字符串,使用 .split() 方法并搜索零。

一个例子:

A=5.000006
print(A)

B=str(A).split(sep='.')
print(B)
print(B[1])
integer=1

for b in B[1]:#B[1] is the decimal part of A
    if b!='0':
        integer=0

如果整数=0,这不是整数, 如果 integer=1,这是一个整数。

【讨论】:

    【解决方案4】:

    我会使用 Python 的内置 isinstance 函数。像这样:

    if not isinstance(value, int):
        print("No Deal, Howie!")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-17
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多