将值 1 分配给正数,将 0 分配给列表中的负数
Assign value of 1 to positive and 0 to negative numbers in a list
我从一个更大的数据集中获取了一个特定的列表,我想将 0 的值分配给负数,将 1 的值分配给 >= 0 的数字。
此代码为我提供了更大数据集中的特定列表
r = data[['return']]
r.head()
这是我已经尝试完成我想要的代码
for num in r:
if num >= 0:
num = 1
else:
num = 0
它不起作用,而是说“'str' 和 'int' 的实例之间不支持‘>=’”
您需要将字符串转换为整数,如 int('2')
r = ['0','1','-1']
for num in r:
number = int(num)
if number >= 0:
number = 1
else:
number = 0
print(number)
r = pd.Series(['1', '2', '-1'])
r = r.astype(float)
r[r>=0] = 1
r[r<0] = 0
# OR r = np.where(r>=0, 1, 0)
- 转换为浮点数
- 索引所有 >= 0 的值并将它们设置为 1
- 索引所有 < 0 的值并将它们设置为 0
您在'data'中存储的数据类型可能是字符串。要确认这一点,您可以
print(type(num))
如果它打印 'str' 那么您将数据作为字符串存储在 'data' 变量中。
对此有 2 个修复:
1. 您可能只想在数据中存储整数。
2.如果你对获取数据的方式无能为力,那么你可以将你的数据转换为整数,然后进行检查。
假设您是新程序员,为了将来参考,这些类型的错误称为类型错误或转换错误。这意味着您的操作数的数据类型与运算符不兼容。在这种情况下,'>=' 期望其操作数 'num' 和 0 的数据类型是相同的数据类型。
附带说明一下,您似乎正在尝试更新列表中的成员。但是您现在循环遍历列表的方式,您将无法更新元素。如果您最终在 for 循环的末尾打印列表,您会注意到 r 根本没有改变。这里有一个很好的Whosebug问题供参考How to modify list entries during for loop?
要解决此问题,请按照以下示例操作。
for idx, num in enumerate(r):
if int(num) >= 0:
r[idx] = '1' # Note that you will be storing a string again
else:
r[idx] = '0'
希望一切顺利!干杯!
return 列可能包含数值,如下所示:
data_dict = {'return': [-1, 0, 2], 'col2': [10, 11, 12]}
data = pd.DataFrame(data)
r = data[['return']]
r.head()
for num in r:
if num >= 0:
num = 1
else:
num = 0
这给出了 TypeError: '>=' not supported between instances of 'str' and 'int',我认为这是因为 for 循环遍历列轴(这是字符串)。
我认为一个不错的解决方案是使用广播而不是 for 循环。但它在更改同一列时会发出警告:
r.loc[r['return'] >= 0,'return'] = 1
r.loc[r['return'] < 0,'return'] = 0
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
因此您可以创建一个新列:
r.loc[r['return'] >= 0, 'return2'] = 1
r.loc[r['return'] < 0, 'return2'] = 0
r['return2'] = r['return2'].astype('int')
我从一个更大的数据集中获取了一个特定的列表,我想将 0 的值分配给负数,将 1 的值分配给 >= 0 的数字。
此代码为我提供了更大数据集中的特定列表
r = data[['return']]
r.head()
这是我已经尝试完成我想要的代码
for num in r:
if num >= 0:
num = 1
else:
num = 0
它不起作用,而是说“'str' 和 'int' 的实例之间不支持‘>=’”
您需要将字符串转换为整数,如 int('2')
r = ['0','1','-1']
for num in r:
number = int(num)
if number >= 0:
number = 1
else:
number = 0
print(number)
r = pd.Series(['1', '2', '-1'])
r = r.astype(float)
r[r>=0] = 1
r[r<0] = 0
# OR r = np.where(r>=0, 1, 0)
- 转换为浮点数
- 索引所有 >= 0 的值并将它们设置为 1
- 索引所有 < 0 的值并将它们设置为 0
您在'data'中存储的数据类型可能是字符串。要确认这一点,您可以
print(type(num))
如果它打印 'str' 那么您将数据作为字符串存储在 'data' 变量中。
对此有 2 个修复: 1. 您可能只想在数据中存储整数。 2.如果你对获取数据的方式无能为力,那么你可以将你的数据转换为整数,然后进行检查。
假设您是新程序员,为了将来参考,这些类型的错误称为类型错误或转换错误。这意味着您的操作数的数据类型与运算符不兼容。在这种情况下,'>=' 期望其操作数 'num' 和 0 的数据类型是相同的数据类型。
附带说明一下,您似乎正在尝试更新列表中的成员。但是您现在循环遍历列表的方式,您将无法更新元素。如果您最终在 for 循环的末尾打印列表,您会注意到 r 根本没有改变。这里有一个很好的Whosebug问题供参考How to modify list entries during for loop?
要解决此问题,请按照以下示例操作。
for idx, num in enumerate(r):
if int(num) >= 0:
r[idx] = '1' # Note that you will be storing a string again
else:
r[idx] = '0'
希望一切顺利!干杯!
return 列可能包含数值,如下所示:
data_dict = {'return': [-1, 0, 2], 'col2': [10, 11, 12]}
data = pd.DataFrame(data)
r = data[['return']]
r.head()
for num in r:
if num >= 0:
num = 1
else:
num = 0
这给出了 TypeError: '>=' not supported between instances of 'str' and 'int',我认为这是因为 for 循环遍历列轴(这是字符串)。
我认为一个不错的解决方案是使用广播而不是 for 循环。但它在更改同一列时会发出警告:
r.loc[r['return'] >= 0,'return'] = 1
r.loc[r['return'] < 0,'return'] = 0
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
因此您可以创建一个新列:
r.loc[r['return'] >= 0, 'return2'] = 1
r.loc[r['return'] < 0, 'return2'] = 0
r['return2'] = r['return2'].astype('int')