【问题标题】:Detecting the type of data we have [duplicate]检测我们拥有的数据类型[重复]
【发布时间】:2016-11-05 14:44:25
【问题描述】:

我正在将一个 csv 文件导入 python。正如预期的那样,它创建了每个值作为字符串的列表,但是我想避免这种情况。 python有没有办法检测一个值实际上是一个int,即使它看起来像'24'?

谢谢。

【问题讨论】:

  • 你用的是什么库?你的数据是什么样的?您必须提供更多详细信息
  • 如果某个列有时包含一个字符串,有时在一个字符串中包含一个 int 怎么办?你必须更具体:向我们展示代码。
  • this 答案。

标签: python python-2.7


【解决方案1】:

您可能想编写一个类似这样的函数来完成这项工作。 您可以扩展它以涵盖其他数据类型。

def return_str_type(str):
    possible_type = [int, float]
    for dtype in possible_type:
        try:
            str = dtype(str)
            break   
        except:
            pass
    return type(str).__name__

print(return_str_type('4'))
print(return_str_type('4.3'))
print(return_str_type('s4'))

这会给 OP

int
float
str

尽管您必须小心订单。例如int 检查应始终在 float 之前。

【讨论】:

  • 你不需要 eval ,列出类并做str=dtype(str)
  • 根据您的建议更新@Copperfield
  • 你打败了我。我有相同的功能,除了一个完整的行并返回一个转换项目的列表。与data = map(f, csv.reader) 一起使用
  • @saurabhbaid 我想你在做点什么!我设法获得了 str 和 int 的完整列表。非常感谢!
  • 如您的示例所示,有一个内置类型名称str,因此最好避免定义您自己的变量、参数等。
【解决方案2】:

ast.literal_eval 是您所寻求的。

print ast.literal_eval('[1, 2, 3]') == [1, 2, 3]
print ast.literal_eval('23') == 23

Python 也有一个eval 命令,但是它并不安全,因为非数据类型的命令也可以通过这个函数被处理用于有害目的。

【讨论】:

  • 谢谢,我试了一下,它说 Value error: Malformed string 但我会继续尝试。
【解决方案3】:

许多不同的模块都支持这一点,其中pandasread_csv 可以推断数据类型。

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多