熊猫datframe中单独的数字和分类变量

时间:2019-09-24 07:21:31

标签: python pandas apache-spark pyspark

我在spark中有一个庞大的数据列表,我只使用它的标头并保存在pandas数据框中。

现在我想从中列出不同的列表,以将分类和数字分开

df2 = df.dtypes
df3 = pd.DataFrame(df2)
print(df3)

df4= df3.filter(df3[1] = 'String')

此statemnet给出错误:

  

SyntaxError:关键字不能是表达式

4 个答案:

答案 0 :(得分:1)

您不需要熊猫,请使用pySpark dataframe.describe()查找所有数字 string 列(这将跳过诸如 date < / em>,时间戳数组 struct 等),然后使用信息过滤掉 StringType()列来自df.dtypes:

from datetime import datetime
df = spark.createDataFrame([ (1, 12.3, 1.5, 'test', 13.23, datetime(2019,9,23)) ], ['i1', 'd2', 'f3', 's4', 'd5', 'dt'])
# DataFrame[i1: bigint, d2: double, f3: double, s4: string, d5: double, dt: timestamp]

# find all numeric and string columns from df (remove the first column which is `summary`)
cols = df.limit(100).describe().columns[1:]
# ['i1', 'd2', 'f3', 's4', 'd5'] 

# get a mapping of column vs dtypes of the df:
dtype_mapping = dict(df.dtypes)
#{'d2': 'double',
# 'd5': 'double',
# 'dt': 'timestamp',
# 'f3': 'double',
# 'i1': 'bigint',
# 's4': 'string'}

# filter out string-type from cols using the above mapping:
numeric_cols = [ c for c in cols if dtype_mapping[c] != 'string' ]
# ['i1', 'd2', 'f3', 'd5']

答案 1 :(得分:1)

这里我们可以把分类数据和数值数据分开

让我们考虑 Ames Housing 数据集。

步骤 1:加载所需的库

import pandas as pd
import numpy as np

第 2 步:加载数据集

dataset = pd.read_csv("C:/datasets/train.csv")

第 3 步:分离数字变量和分类变量

numeric_data = dataset.select_dtypes(include=[np.number])
categorical_data = dataset.select_dtypes(exclude=[np.number])

numeric_data.shape[1]
categorical_data.shape[1]

数据集中有 38 个数字列和 43 个分类列。

答案 2 :(得分:0)

除了必要的另一个'='之外,您还缺少其他内容,例如您尝试访问的索引为'0'而不是'1'。另外,pandas DataFrame中没有数据类型“ String”,它是“ object”。您可以尝试如下操作:

df2 = df.dtypes
df3 = pd.DataFrame(df2)
print(df3)
df4 = df3.filter(df3.iloc[:,0] == 'object')

答案 3 :(得分:0)

您可以像这样从数据框中获取非数字列

df.loc[:,df.dtypes==np.object]