我可以用一个常量减去一个Dataframe列。示例:
snp_sum = snp['Adj Close'] - 10
但是,一旦我将常量替换为变量snp_30Y
,它就不起作用了
snp_30Y = ((snp_t1-snp_t0)/snp_t0)
snp_30Y = snp_30Y.values
snp_sum = snp['Adj Close'] - snp_30Y
我得到的结果是ValueError: Length of passed values is 1, index implies 360
结果应该与我将变量定义为像10这样的常量一样。
snp_sum = snp['Adj Close'] - 10
结果:
0 267.720001
1 287.470001
2 278.859985
3 284.869995
4 299.640015
发布于 2019-09-01 14:41:47
正如wjandrea指出的,您的示例不是reproducible。此外,标题与示例不匹配:您提到了乘法,而示例显示了一些减法。
因此,这里是一些一般性的答案,但如果您希望获得更具体的问题,请更新您的问题。
您可以对两个数据框列进行操作(乘法、减法等)。但前提是它们具有相同的维度。您可以使用<col>.shape
或len(<col>)
检查该尺寸。
还要注意,在pandas中,您应该了解几种类型:完整的数据帧是一个Dataframe
,而单个列是一个Series
。这些对象是名为array
的更低级、更高效的numpy
对象的包装器。您可以使用<col_or_df>.values
访问这些较低级别的对象。支持Series
和Series
之间以及Series
和array
之间的操作。这就是为什么你有两种方法来实现你所要求的:
import pandas as pd
# data
df = pd.DataFrame({'a': [0, 10, 20],
'b': [1, 11, 21]})
# subtracting a constant
df_cst = df['a'] - 1
print("df_cst (type subtracted: %s)" % type(1))
print(df_cst)
print()
# subtracting a column (= a Series)
df_var = df['a'] - df['b']
print("df_var (type subtracted: %s)" % type(df['b']))
print(df_var)
print()
# subtracting a column values (= a numpy array)
df_var2 = df['a'] - df['b'].values
print("df_var2 (type subtracted: %s)" % type(df['b'].values))
print(df_var2)
收益率
df_cst (type subtracted: <class 'int'>)
0 -1
1 9
2 19
Name: a, dtype: int64
df_var (type subtracted: <class 'pandas.core.series.Series'>)
0 -1
1 -1
2 -1
dtype: int64
df_var2 (type subtracted: <class 'numpy.ndarray'>)
0 -1
1 -1
2 -1
Name: a, dtype: int64
正如您所看到的,当减法中的两个变量中只有一个是dataframe列(一个Series
)时,结果将传递其名称。当第二个项目也是Series
时,该名称将丢失,因为熊猫无法知道使用哪个名称来表示结果。
https://stackoverflow.com/questions/57743269
复制相似问题