在列表中将值1分配给正数,将0分配给负数

时间:2019-03-23 23:04:57

标签: python string int sign

我从更大的数据集中获取了一个特定列表,想将0的值分配给负数,将1的值分配给> =0。

这段代码为我提供了较大数据集中的特定列表

r = data[['return']]
r.head()

这是我已经尝试完成的代码

for num in r:
    if num >= 0:
        num = 1
    else:
        num = 0

它不起作用,而是说在'str'和'int'的实例之间不支持“'> ='”

4 个答案:

答案 0 :(得分:1)

您存储在“数据”中的数据类型可能是字符串。要确认这一点,您可以

print(type(num))

如果它显示“ str”,则表示您将数据存储在“ data”变量中作为字符串。

有2个修复程序: 1.您可能只想在数据中存储整数。 2.如果您无法对获取数据的方式做任何事情,则可以将数据转换为整数,然后进行检查。

假设您是新程序员,以备将来参考,这些类型的错误称为类型错误或转换错误。意味着您的操作数的数据类型与运算符不兼容。在这种情况下,“> =”期望其操作数“ num”和0的数据类型都属于同一数据类型。

在旁注中,您似乎正在尝试更新列表的成员。但是,现在循环浏览列表的方式将无法更新元素。如果最终在for循环的末尾打印列表,您会注意到r根本没有改变。这是一个很好的stackoverflow问题,供参考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'

希望能成功!干杯!

答案 1 :(得分:0)

您需要将字符串转换为类似int('2')的整数

r = ['0','1','-1']
for num in r:
    number = int(num)
    if number >= 0:
        number = 1
    else:
        number = 0
    print(number)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

返回列可能包含数字值,如下所示:

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:'str'和'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')