【问题标题】:How to get pandas.DataFrame columns containing specific dtype如何获取包含特定 dtype 的 pandas.DataFrame 列
【发布时间】:2014-09-14 02:56:54
【问题描述】:

我正在使用 df.columns.values 来制作列名列表,然后我会对其进行迭代并制作图表等...但是当我设置它时,我忽略了 df 中的非数字列。现在,我宁愿不要简单地从 df (或它的副本)中删除这些列。相反,我想找到一种巧妙的方法将它们从列名列表中删除。

现在我有:

names = df.columns.values 

我想要达到的行为类似于:

names = df.columns.values(column_type=float64) 

有什么巧妙的方法可以做到这一点吗?我想我可以复制 df,然后在执行 columns.values 之前删除那些非数字列,但这让我觉得很笨重。

欢迎任何意见/建议。谢谢。

【问题讨论】:

标签: python pandas


【解决方案1】:

可能有人会给你比这更好的答案,但我倾向于做的一件事是,如果我所有的数字数据都是 int64float64 对象,那么你可以创建列数据类型的字典,然后使用这些值来创建列列表。

因此,例如,在我有 float64int64object 类型的列的数据框中,首先您可以这样查看数据类型:

DF.dtypes

如果它们符合标准,即非数字数据列都是 object 类型(因为它们在我的数据框中),那么您可以执行以下操作来获取数字列的列表:

[key for key in dict(DF.dtypes) if dict(DF.dtypes)[key] in ['float64', 'int64']]

它只是一个简单的列表理解。没有什么花哨。同样,尽管这是否适合您将取决于您如何设置数据框...

【讨论】:

  • 我最终使用了它,因为它可以工作并且因为我正在运行 0.14.0 并且不想在我的项目中间升级到 0.14.1。谢谢。
【解决方案2】:

0.14.1 中有一个新功能,select_dtypes 通过提供要包含或排除的 dtype 列表来按 dtype 选择列。

例如:

df = pd.DataFrame({'a': np.random.randn(1000),
                   'b': range(1000),
                   'c': ['a'] * 1000,
                   'd': pd.date_range('2000-1-1', periods=1000)})


df.select_dtypes(['float64','int64'])

Out[129]: 
            a    b
0    0.153070    0
1    0.887256    1
2   -1.456037    2
3   -1.147014    3
...

【讨论】:

  • select_dtypes 现在还允许选择更一般的类别(例如df.select_dtypes('number')df.select_dtypes('object')df.select_dtypes('datetime'))。
【解决方案3】:

dtypes 是熊猫系列。 这意味着它包含索引和值属性。 如果您只需要列名:

headers = df.dtypes.index

它将返回一个包含“df”数据框列名的列表。

【讨论】:

    【解决方案4】:

    从 python3 中的 pandas 数据框中获取列名- 在这里,我从 fileName.csv 文件创建一个数据框

    >>> import pandas as pd
    >>> df = pd.read_csv('fileName.csv')
    >>> columnNames = list(df.head(0)) 
    >>> print(columnNames)
    

    【讨论】:

      【解决方案5】:

      您还可以尝试从返回 columnn name 以及 dtype 的 panda 数据框中获取列名。在这里,我将从https://mlearn.ics.uci.edu/databases/autos/imports-85.data 读取 csv 文件,但您已经定义了包含列名的标题。

      import pandas as pd
      
      url="https://mlearn.ics.uci.edu/databases/autos/imports-85.data"
      
      df=pd.read_csv(url,header = None)
      
      headers=["symboling","normalized-losses","make","fuel-type","aspiration","num-of-doors","body-style",
               "drive-wheels","engine-location","wheel-base","length","width","height","curb-weight","engine-type",
               "num-of-cylinders","engine-size","fuel-system","bore","stroke","compression-ratio","horsepower","peak-rpm"
               ,"city-mpg","highway-mpg","price"]
      
      df.columns=headers
      
      print df.columns
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-16
        • 2017-08-02
        • 1970-01-01
        • 2018-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多