我使用df.columns.values来创建一个列名列表然后迭代并制作图表等等......但是当我设置它时我忽略了df中的非数字列。现在,我更不用简单地从df(或其副本)中删除这些列。相反,我想找到一种灵活的方法来从列名列表中消除它们。
现在我有:
names = df.columns.values
我想要达到的目标就像:
names = df.columns.values(column_type=float64)
有没有光滑的方法来做到这一点?我想我可以制作df的副本,并在执行columns.values之前删除那些非数字列,但这让我感到笨拙。
欢迎任何意见/建议。谢谢。
答案 0 :(得分:23)
有人会给你一个比这更好的答案,但我倾向于做的一件事是,如果我的所有数字数据都是int64
或float64
个对象,那么你可以创建一个列的字典数据类型然后使用值来创建列列表。
例如,在数据框中,我有float64
,int64
和object
类型的列,首先您可以查看数据类型:
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