如何获取包含特定dtype的pandas.DataFrame列

时间:2014-07-23 04:17:22

标签: python pandas

我使用df.columns.values来创建一个列名列表然后迭代并制作图表等等......但是当我设置它时我忽略了df中的非数字列。现在,我更不用简单地从df(或其副本)中删除这些列。相反,我想找到一种灵活的方法来从列名列表中消除它们。

现在我有:

names = df.columns.values 

我想要达到的目标就像:

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

有没有光滑的方法来做到这一点?我想我可以制作df的副本,并在执行columns.values之前删除那些非数字列,但这让我感到笨拙。

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

5 个答案:

答案 0 :(得分:23)

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

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

DF.dtypes

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

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

它只是一个简单的列表理解。没有什么花哨。同样,虽然这对你有用,但取决于你如何设置数据帧......

答案 1 :(得分:22)

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

headers = df.dtypes.index

它将返回一个包含" df"列名称的列表。数据帧。

答案 2 :(得分:18)

在0.14.1中有一个新功能,select_dtypes可以通过提供要包含或排除的dtypes列表来按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
...

答案 3 :(得分:7)

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

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

答案 4 :(得分:0)

您还可以尝试从返回列名称和dtype的熊猫数据框中获取列名称。在这里,我将从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