【发布时间】:2021-10-27 11:52:46
【问题描述】:
我有一个名为 df4 的 df,你可以通过以下代码获得它:
df4s = """
contract RB BeginDate ValIssueDate EndDate Valindex0 48 46 47 49 50
2 A00118 46 19850100 19880901 99999999 50 1 2 3 7 7
3 A00118 47 19000100 19880901 19831231 47 1 2 3 7 7
5 A00118 47 19850100 19880901 99999999 50 1 2 3 7 7
6 A00253 48 19000100 19820101 19811231 47 1 2 3 7 7
7 A00253 48 19820100 19820101 19841299 47 1 2 3 7 7
8 A00253 48 19850100 19820101 99999999 50 1 2 3 7 7
9 A00253 50 19000100 19820101 19781231 47 1 2 3 7 7
10 A00253 50 19790100 19820101 19841299 47 1 2 3 7 7
11 A00253 50 19850100 19820101 99999999 50 1 2 3 7 7
"""
df4 = pd.read_csv(StringIO(df4s.strip()), sep='\s+',
dtype={"RB": int, "BeginDate": int, "EndDate": int,'ValIssueDate':int,'Valindex0':int})
输出将是:
contract RB BeginDate ValIssueDate EndDate Valindex0 48 46 47 49 50
2 A00118 46 19850100 19880901 99999999 50 1 2 3 7 7
3 A00118 47 19000100 19880901 19831231 47 1 2 3 7 7
5 A00118 47 19850100 19880901 99999999 50 1 2 3 7 7
6 A00253 48 19000100 19820101 19811231 47 1 2 3 7 7
7 A00253 48 19820100 19820101 19841299 47 1 2 3 7 7
8 A00253 48 19850100 19820101 99999999 50 1 2 3 7 7
9 A00253 50 19000100 19820101 19781231 47 1 2 3 7 7
10 A00253 50 19790100 19820101 19841299 47 1 2 3 7 7
11 A00253 50 19850100 19820101 99999999 50 1 2 3 7 7
我正在尝试通过以下逻辑构建一个新列,新列的值将基于 2 个现有列的值:
def test(RB):
n=1
for i in np.arange(RB,50):
n = n * df4[str(i)].values
return n
vfunc=np.vectorize(test)
df4['n']=vfunc(df4['RB'].values)
然后收到错误:
res = array(outputs, copy=False, subok=True, dtype=otypes[0])
ValueError: setting an array element with a sequence.
【问题讨论】:
-
df4[str(i)].values是一个数组,因此您返回的n(假设 RB 足够低以至于您可以循环)是一个数组,例如:[6 6 6 6 6 6 6 6 6]vectorize 正在尝试将其分配回一维大批。你想在这里创建一个二维数组吗? -
是的,我想是的,谢谢您的回复
-
@HenryEcker,我的回答显示错误发生在
vectorize,而不是数据框列的分配。
标签: python pandas dataframe numpy numpy-ndarray