我从较大的数据集中获取了一个特定的列表,并希望将值0分配给负数,将1分配给数字> = 0。
这段代码给了我更大数据集的具体列表
r = data[['return']]
r.head()
这是我已经尝试完成我想要的代码
for num in r:
if num >= 0:
num = 1
else:
num = 0
它没有用,反而说''>''在'str'和'int'的实例之间不支持“
返回列可能包含数值,如下所示:
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')
您存储在“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'
希望工作出来!干杯!
你需要将字符串转换为像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)