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

问题描述 投票:0回答:4

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

这段代码给了我更大数据集的具体列表

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

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

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

它没有用,反而说''>''在'str'和'int'的实例之间不支持“

python string int sign
4个回答
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

这给出了'str'和'int'实例之间不支持TypeError:'> =',我认为这是因为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')

1
投票

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

print(type(num))

如果它打印'str',那么您将数据存储在'data'变量中作为字符串。

有两个修复: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'

希望工作出来!干杯!


0
投票

你需要将字符串转换为像int('2')这样的整数

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


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
© www.soinside.com 2019 - 2024. All rights reserved.