我在spark中有一个庞大的数据列表,我只使用它的标头并保存在pandas数据框中。
现在我想从中列出不同的列表,以将分类和数字分开
df2 = df.dtypes
df3 = pd.DataFrame(df2)
print(df3)
df4= df3.filter(df3[1] = 'String')
此statemnet给出错误:
SyntaxError:关键字不能是表达式
答案 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]