【问题标题】:Create Dummy Variables with Loop in Python在 Python 中使用循环创建虚拟变量
【发布时间】:2018-03-31 07:09:15
【问题描述】:

我正在尝试为包含某个单词的某些列创建一堆新的二进制变量(我想将这些新的二进制变量命名为BINARY_ +column name),我正在尝试这样做但它不起作用:

# create empty list
List_of_dummy_names = [] 

# word
string = "WORD"

for col in list(df.columns.values):
    if string in df.columns.values[col]:
        List_of_dummy_names.append('BINARY_'+col)

【问题讨论】:

  • 你只有一排吗?或者您想检查整个列中是否存在某个单词,或者您想检查单个单元格并将该列附加到列表中。
  • List_of_dummy_names = ['BINARY_' + col for col in df.columns.astype(str) if string in col]

标签: python pandas loops dummy-variable


【解决方案1】:

在您的情况下,col 看起来像是某种集合。你可能想这样做:

List_of_dummy_names.append('BINARY_'+string)

【讨论】:

  • 感谢您的帮助!我试过了,但我收到了这个错误:
  • IndexError: 只有整数、切片 (:)、省略号 (...)、numpy.newaxis (None) 和整数或布尔数组是有效的索引
【解决方案2】:

如果您想用新创建的 List_of_dummy_names(带有 'BINARY_'+column_name 的元素)重命名 pandas 数据框列,那么您可以按照我的回答。

让我们说

cv = list(df.columns.values)
#cv = ['aword', 'bword', 'c']
search_String = 'word'
replace_dict = dict(zip(cv,['BINARY_'+x if search_String in x else x for x in cv]))
#{'aword': 'BINARY_aword', 'bword': 'BINARY_bword', 'c': 'c'}
#Then in pandas dataframe rename method, use this dictinary
new_df = df.rename(col=replace_dict)

同时检查您是否可以使用以下内容

List_of_dummy_names = ['BINARY_'+x for x in cv if search_String in x ]
#['BINARY_aword', 'BINARY_bword']  #filters the element having 'word' in them and prefixed with 'BINARY_'

检查你是否需要这个(因为我对“你在找什么”感到困惑)

#df has only one column named 'col_to_replace'
col_to_replace
   aword
   bword
   c
df['col_to_replace'] = ['BINARY_'+x if search_String in x else x for x in df['col_to_replace']]
#col_to_replace
   BINARY_aword  #prefixed
   BINARY_bword  #prefixed
   c             #word not found, so as it was

现在您在列表中获得了新的列名列表。

List_of_dummy_names #['BINARY_aword', 'BINARY_bword']
#loop over it and create new columns in existing dataframe
for col_Name in List_of_dummy_names:
    df[col_Name] = 'default_value_1' #it will create new column "BINARY_aword" and all the row_values as string 'default_value_1' for first loop and in 2nd loop new column "BINARY_aword" with all values as 'default_value_1'.

如果您在 len(list) == len(df) 的列表中已有值,则将该列表指定为 df[col_Name] = list_of_values_having_same_length_as_DF

【讨论】:

  • 嗨!感谢您的建议,但我正在尝试将这些新的二进制变量添加到数据框
  • @JamesPietroZanzarelli- 然后使用 List_of_dummy_names = ['BINARY_'+x for x in cv if search_String in x] 然后将此列表用作值,否则使用上述字典并调用“map”函数用于替换值的数据框列。
  • 这真的很慢。如果您使用的是 pandas,那么这些不是您应该给出的命令类型。
  • 是的,我知道。但试图提供帮助,我还建议 OP 使用地图。
  • 现在我有了这个 List_of_dummy_names,是否可以将这些作为附加列附加到现有数据框?如果是这样,我该怎么做?
猜你喜欢
  • 2017-02-24
  • 2020-04-04
  • 2016-04-24
  • 1970-01-01
  • 2021-08-03
  • 2020-11-29
  • 2021-07-20
  • 2012-07-20
  • 2021-07-18
相关资源
最近更新 更多