Python Pandas 值错误
Python Pandas ValueError
感谢您提出以下建议,我已修改我的问题以使其更清楚
我有一个带有余额的数据框 (bp) 以及第 1 - 6 列中的(年度)收款。
import pandas as pd
bp = pd.DataFrame({'Balance': {0: 20000, 1: 2000, 2: 7000},
'1': {0: 500, 1: 400, 2: 100},
'2': {0: 1500, 1: 500, 2: 2000},
'3': {0: 0, 1: 1000, 2: 3000},
'4': {0: 0, 1: 500, 2: 20},
'5': {0: 0, 1: 50, 2: 0},
'6': {0: 0, 1: 0, 2: 0},
},columns=['Balance','1','2','3','4','5','6'])
我正在尝试预测下一年的余额(因此第 1 列中的余额应该是开始余额减去第 1 年的收款)。但是与此同时,如果不需要更多收款,我想将余额减记为零。
gbv = bp.copy()
startcol =1
endcol = 7
for i in range(startcol,endcol):
gbv.iloc[:,i] = gbv.iloc[:,i-1] - bp.iloc[:,i]
gbv[gbv < 0] = 0
gbv
上面的代码有效,但如果不需要更多的集合,则不会将余额记为零,我尝试了以下方法,但这会出错。我想这是因为我正在比较行(检查 bp 中是否有未来的集合)并且 gbv.iloc[:,i] 将结果强制放在总列上。不过不确定我应该怎么做。
gbv = bp.copy()
startcol =2
endcol = 14
for i in range(startcol,endcol):
if bp.iloc[:,i:endcol].sum(axis=0) == 0:
gbv.iloc[:,i]= 0
else:
gbv.iloc[:,i] = gbv.iloc[:,i-1] - bp.iloc[:,i]
gbv[gbv < 0] = 0
gbv
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-22-1920f826f3ea> in <module>()
4 endcol = 14
5 for i in range(startcol,endcol):
----> 6 if bp.iloc[:,i:endcol].sum(axis=0) == 0:
7 gbv.iloc[:,i]= 0
8 else:
/Users/Jelmer/anaconda/lib/python3.5/site-packages/pandas/core/generic.py in __nonzero__(self)
951 raise ValueError("The truth value of a {0} is ambiguous. "
952 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 953 .format(self.__class__.__name__))
954
955 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我正在尝试获得以下输出:
Balance 1 2 3 4 5 6
0 20000 19500 18000 0 0 0 0
1 2000 1600 1100 100 0 0 0
2 7000 6900 4900 1900 1880 0 0
欢迎提出任何建议!
bp.iloc[:,i:endcol] 给你系列,如果你想取该系列的总和,轴应该沿着行。看起来您的代码中有错误。将代码的第 5 行更改为以下内容,看看它是否有效。
bp.iloc[:,i:endcol].sum(axis=0) == 0
至少,您遇到的错误应该消失了。
知道了!为了完整起见,我会 post 在这里回答。诀窍是过滤未来集合为零的行。
gbv = bp.copy()
startcol =2
endcol = 14
for i in range(startcol,endcol):
gbv.iloc[:,i] = gbv.iloc[:,i-1] - bp.iloc[:,i]
gbv.iloc[:,i][bp.iloc[:,i:endcol].sum(axis=1)==0] = 0
gbv[gbv < 0] = 0
gbv
感谢您提出以下建议,我已修改我的问题以使其更清楚
我有一个带有余额的数据框 (bp) 以及第 1 - 6 列中的(年度)收款。
import pandas as pd
bp = pd.DataFrame({'Balance': {0: 20000, 1: 2000, 2: 7000},
'1': {0: 500, 1: 400, 2: 100},
'2': {0: 1500, 1: 500, 2: 2000},
'3': {0: 0, 1: 1000, 2: 3000},
'4': {0: 0, 1: 500, 2: 20},
'5': {0: 0, 1: 50, 2: 0},
'6': {0: 0, 1: 0, 2: 0},
},columns=['Balance','1','2','3','4','5','6'])
我正在尝试预测下一年的余额(因此第 1 列中的余额应该是开始余额减去第 1 年的收款)。但是与此同时,如果不需要更多收款,我想将余额减记为零。
gbv = bp.copy()
startcol =1
endcol = 7
for i in range(startcol,endcol):
gbv.iloc[:,i] = gbv.iloc[:,i-1] - bp.iloc[:,i]
gbv[gbv < 0] = 0
gbv
上面的代码有效,但如果不需要更多的集合,则不会将余额记为零,我尝试了以下方法,但这会出错。我想这是因为我正在比较行(检查 bp 中是否有未来的集合)并且 gbv.iloc[:,i] 将结果强制放在总列上。不过不确定我应该怎么做。
gbv = bp.copy()
startcol =2
endcol = 14
for i in range(startcol,endcol):
if bp.iloc[:,i:endcol].sum(axis=0) == 0:
gbv.iloc[:,i]= 0
else:
gbv.iloc[:,i] = gbv.iloc[:,i-1] - bp.iloc[:,i]
gbv[gbv < 0] = 0
gbv
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-22-1920f826f3ea> in <module>()
4 endcol = 14
5 for i in range(startcol,endcol):
----> 6 if bp.iloc[:,i:endcol].sum(axis=0) == 0:
7 gbv.iloc[:,i]= 0
8 else:
/Users/Jelmer/anaconda/lib/python3.5/site-packages/pandas/core/generic.py in __nonzero__(self)
951 raise ValueError("The truth value of a {0} is ambiguous. "
952 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 953 .format(self.__class__.__name__))
954
955 __bool__ = __nonzero__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我正在尝试获得以下输出:
Balance 1 2 3 4 5 6
0 20000 19500 18000 0 0 0 0
1 2000 1600 1100 100 0 0 0
2 7000 6900 4900 1900 1880 0 0
欢迎提出任何建议!
bp.iloc[:,i:endcol] 给你系列,如果你想取该系列的总和,轴应该沿着行。看起来您的代码中有错误。将代码的第 5 行更改为以下内容,看看它是否有效。
bp.iloc[:,i:endcol].sum(axis=0) == 0
至少,您遇到的错误应该消失了。
知道了!为了完整起见,我会 post 在这里回答。诀窍是过滤未来集合为零的行。
gbv = bp.copy()
startcol =2
endcol = 14
for i in range(startcol,endcol):
gbv.iloc[:,i] = gbv.iloc[:,i-1] - bp.iloc[:,i]
gbv.iloc[:,i][bp.iloc[:,i:endcol].sum(axis=1)==0] = 0
gbv[gbv < 0] = 0
gbv