【问题标题】:datatype in python (looking for something similar to str in R)python中的数据类型(在R中寻找类似于str的东西)
【发布时间】:2016-02-15 17:42:28
【问题描述】:

我想在 python 的 csv 文件中查找所有变量的数据类型。在 R 中,我们可以使用 str() 命令实现相同的目的。

str(data_frame)

这给出了这样的输出

> str(train)
'data.frame':   891 obs. of  12 variables:
 $ PassengerId: int  1 2 3 4 5 6 7 8 9 10 ...
 $ Survived   : int  0 1 1 1 0 0 0 0 1 1 ...
 $ Pclass     : int  3 1 3 1 3 3 1 3 3 2 ...
 $ Name       : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
 $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
 $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
 $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
 $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
 $ Ticket     : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
 $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
 $ Cabin      : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
 $ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...

python中有没有类似的方法?

【问题讨论】:

  • 表中的所有变量 什么是
  • @KevinGuan - 这是一个 csv 文件。
  • 在 Python 中没有自动执行此操作的方法,但您可以使用 .format() 指令手动执行此操作
  • @SilvioMayolo - 感谢您提供的信息
  • 我认为df.info()pandas 是相似的。更多这里pandas.pydata.org/pandas-docs/version/0.17.0/…

标签: python python-2.7 csv pandas


【解决方案1】:

你可能想要dtypes

>>> import pandas as pd
>>> df = pd.DataFrame({'foo': [1, 2, 3], 'bar': [1.0, 2.0, 3.0], 'baz': ['qux', 'quux', 'quuux']})
>>> df.dtypes
bar    float64
baz     object
foo      int64
dtype: object

【讨论】:

    【解决方案2】:

    判断字符串是否表示有效int 的简单方法是尝试将字符串转换为int,并在它不是合法的int 时捕获ValueError 异常。与float 类似。这是 Python 2 中的简短演示:

    data = 'string 37 3.14159 word -5 0 -1.4142 text'
    
    def datatype(s):
        try:
            int(s)
        except ValueError:
            try:
                float(s)
            except ValueError:
                return 'string'
            else:
                return 'float'
        else:
            return 'int'
    
    for s in data.split():
        print '%-15r: %s' % (s, datatype(s))
    

    输出

    'string'       : string
    '37'           : int
    '3.14159'      : float
    'word'         : string
    '-5'           : int
    '0'            : int
    '-1.4142'      : float
    'text'         : string
    

    但是,普通的 Python 代码(通常)不会使用这样的函数:它会假设数据是正确的,并将转换代码包装在一个简单的 try: ... except ValueError:... else: 块中,而不是使用那个疯狂的嵌套结构来测试数据你准备好处理它之前。

    合理的 CSV 在随机位置不会有不同的数据类型,因此您的代码不需要猜测给定字段中的数据类型。 OTOH,并非所有 CSV 都经过精心设计... :)

    【讨论】:

    • 另外,看看ast.literal_eval 来处理所有Python 文字(不使用不安全的eval)。让我们进行一次调用以酌情转换为intfloat
    • 这个问题是关于一个简单的 CSV 文件,所以我只是展示一个简单的解决方案,它不需要新 Python 程序员不需要打扰的高级模块(如 ast ),或第 3 方模块。如果他们想要使用pandas(例如)的解决方案,那么他们可以在问题中提到这一点(并添加适当的标签)。
    • ast 作为一个整体:坚果,同意。 ast.literal_eval 特别有用。不是说它需要在答案中,但人们应该知道它,因为它根本不容易找到。
    • @ShadowRanger:很好,ast.literal_eval 确实有它的用途。 OTOH,新的 Python 程序员需要了解使用 try:..exceptEAFP 原则的标准技术,恕我直言。
    猜你喜欢
    • 2010-12-07
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 2011-10-03
    相关资源
    最近更新 更多