到目前为止,我能够获取数据框中存在的所有列名称的列表,或者根据其数据类型、起始字母等获取特定的列名称...
现在我的要求是获取列名称或子列表的整个列表,并从中排除一列(即目标变量/标签列。这是机器学习的一部分。所以我使用的术语机器学习)
请注意,我并不是在谈论这些列中存在的数据。我只是获取列名称,并希望通过名称排除特定列
请参阅下面的示例以更好地理解:
# 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/