python-3.x - Python - 如何从 Panda Dataframe 的列列表中动态排除列名称

标签 python-3.x pandas

到目前为止,我能够获取数据框中存在的所有列名称的列表,或者根据其数据类型、起始字母等获取特定的列名称...

现在我的要求是获取列名称或子列表的整个列表,并从中排除一列(即目标变量/标签列。这是机器学习的一部分。所以我使用的术语机器学习)

请注意,我并不是在谈论这些列中存在的数据。我只是获取列名称,并希望通过名称排除特定列

请参阅下面的示例以更好地理解:

# Get all the column names from a Dataframe
df.columns

Index(['transactionID', 'accountID', 'transactionAmountUSD',
       'transactionAmount', 'transactionCurrencyCode',
       'accountAge', 'validationid', 'LABEL'],
      dtype='object')

# Get only the Numeric Variables (Columns with numeric values in it)
df._get_numeric_data().columns

Index(['transactionAmountUSD', 'transactionAmount', 'accountAge', 'LABEL'],
      dtype='object')

现在为了获得剩余的列名称,我减去上述两个命令

string_cols = list(set(list(df.columns))-set(df._get_numeric_data().columns))

好吧,一切都很顺利,直到我做到了这一点。

我发现标签列虽然有数值,但不应出现在数值变量列表中。应该排除它。

(即)我想排除特定的列名称(不使用其在列表中的索引,而是明确使用其名称)

我尝试了类似以下的语句,但没有成功。对此的任何意见都会有所帮助

set(df._get_numeric_data().columns-set(df.LABEL)
set(df._get_numeric_data().columns-set(df.LABEL.column)
set(df._get_numeric_data().columns-set(df['LABEL'])

我确信我错过了一件非常基本的事情,但无法弄清楚。

最佳答案

首先,您可以使用更简单的方式排除所有数字列

pd.DataFrame.select_dtypes(exclude=[np.number])

  transactionID accountID transactionCurrencyCode validationid
0             a         a                       a            a
1             a         a                       a            a
2             a         a                       a            a
3             a         a                       a            a
4             a         a                       a            a

其次,删除列的方法有很多种。 See this post

df._get_numeric_data().drop('LABEL', 1)

   transactionAmountUSD  transactionAmount  accountAge
0                     1                  1           1
1                     1                  1           1
2                     1                  1           1
3                     1                  1           1
4                     1                  1           1

如果您确实想要这些列,请使用pd.Index.difference

df._get_numeric_data().columns.difference(['LABEL'])

Index(['accountAge', 'transactionAmount', 'transactionAmountUSD'], dtype='object')

设置

df = pd.DataFrame(
    [['a', 'a', 1, 1, 'a', 1, 'a', 1]] * 5,
    columns=[
        'transactionID', 'accountID', 'transactionAmountUSD',
        'transactionAmount', 'transactionCurrencyCode',
        'accountAge', 'validationid', 'LABEL']
)

关于python-3.x - Python - 如何从 Panda Dataframe 的列列表中动态排除列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47278064/

相关文章:

python - pandas 数据帧上的条件过滤器和 groupby

python - 如果 df1 中的工作表名称与字符串值匹配,我如何将 df2 复制到 df1

python - 在 Python 中将一个字符串列拆分为多个列

python-3.x - 函数调用中的参数没有值

python - 对包含列表作为值的字典列表进行排序

python - 在 Python 模块中使用部分构建 Sphinx autodoc 文档

python-2.7 - 对 pandas 数据帧重新采样并计算实例数

python - 合并多个 DataFrames Pandas

python - 什么是变量注解?

python - 如何根据另一列的计数删除具有 51%+ NaN 值的行