[英]How to get pandas.DataFrame columns containing specific dtype
我正在使用df.columns.values来创建一个列名列表然后迭代并制作图表等等......但是当我设置它时,我忽略了df中的非数字列。 现在,我更不用简单地从df(或它的副本)中删除这些列。 相反,我想找到一种灵活的方法来从列名列表中消除它们。
我现在有:
names = df.columns.values
我想要达到的是行为:
names = df.columns.values(column_type=float64)
有没有光滑的方法来做到这一点? 我想我可以制作df的副本,并在执行columns.values之前删除那些非数字列,但这让我觉得笨重。
欢迎任何意见/建议。 谢谢。
有人会给你一个比这更好的回答,但我倾向于做的一件事是,如果我的所有数值数据都是int64
或float64
对象,那么你可以创建列数据类型的dict,然后使用这些值创建你的列表列。
因此,例如,在我拥有float64
, int64
和object
类型的列的数据float64
,您首先可以查看数据类型:
DF.dtypes
如果它们符合非数字数据列都是object
类型的标准(因为它们在我的数据框中),那么您可以执行以下操作来获取数字列的列表:
[key for key in dict(DF.dtypes) if dict(DF.dtypes)[key] in ['float64', 'int64']]
它只是一个简单的列表理解。 没有什么花哨。 同样,虽然这对您有用,但取决于您如何设置数据帧......
dtypes是熊猫系列。 这意味着它包含索引和值属性。 如果您只需要列名:
headers = df.dtypes.index
它将返回一个包含“df”数据帧列名的列表。
在0.14.1中有一个新功能, select_dtypes
通过dtype选择列,通过提供要包含或排除的dtypes列表。
例如:
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
...
从python3中获取pandas dataframe中的列名 - 这里我从fileName.csv文件创建一个数据帧
>>> import pandas as pd
>>> df = pd.read_csv('fileName.csv')
>>> columnNames = list(df.head(0))
>>> print(columnNames)
您还可以尝试从panda数据框中获取列名,并返回列名和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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.