我从更大的数据集中获取了一个特定列表,想将0的值分配给负数,将1的值分配给> =0。
这段代码为我提供了较大数据集中的特定列表
r = data[['return']]
r.head()
这是我已经尝试完成的代码
for num in r:
if num >= 0:
num = 1
else:
num = 0
它不起作用,而是说在'str'和'int'的实例之间不支持“'> ='”
答案 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)
答案 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')