Python 应用这两个数据帧时,数据帧loc中出现错误
我试图将这两个数据帧(数据2和交易)放在一起,使其看起来像这样: 数据2:Python 应用这两个数据帧时,数据帧loc中出现错误,python,pandas,dataframe,loc,Python,Pandas,Dataframe,Loc,我试图将这两个数据帧(数据2和交易)放在一起,使其看起来像这样: 数据2: Close 2015-08-28 113.290001 2015-08-31 112.760002 2015-09-01 107.720001 2015-09-02 112.339996 2015-09-03 110.370003 2015-09-04 109.269997 2015-09-08 112.309998 2015-09-09 110.150002 2015-09-10
Close
2015-08-28 113.290001
2015-08-31 112.760002
2015-09-01 107.720001
2015-09-02 112.339996
2015-09-03 110.370003
2015-09-04 109.269997
2015-09-08 112.309998
2015-09-09 110.150002
2015-09-10 112.570000
2015-09-11 114.209999
行业:
Trades
2015-08-28 3.0
2015-08-31 3.0
2015-09-01 3.0
2015-09-02 3.0
2015-09-03 2.0
代码:
但这是返回错误:
IndexingError回溯(最近一次调用上次) 在() 7数据2[“关闭”]绘图(ax=ax1,lw=2) 8. ---->9 ax1.绘图(data2.loc[trades.trades==2.0]。索引,data2.total[trades.trades==2.0], 10'^',markersize=10,color='m') 11 ax1.绘图(data2.loc[trades.trades==3.0]。索引 3帧 /检查索引器(索引,键)中的usr/local/lib/python3.6/dist-packages/pandas/core/index.py 2316如果掩码为.any(): 2317 raise索引错误( ->2318“不可对齐的布尔级数提供为” 2319“索引器(布尔级数和的索引” 2320“索引对象不匹配)。”
IndexingError:作为索引器提供的不可对齐的布尔序列(布尔序列的索引和索引对象的索引不匹配)。两个数据帧的索引不同。我采用了为data2 dataframe定义掩码的方法,该方法基于trades dataframe中的值,并且有效 另外,您的示例代码引用的是不存在的total。请更新以使用Close 输出
正在同一点绘制“^”和“v”,你知道为什么吗?我定义掩码的方式有错误。应该是
mask2=data2.index.isin(trades.loc[trades.trades==2.0].index)mask3=data2.index.isin(trades.loc[trades.trades==3.0].index)
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111, ylabel='Portfolio value in $')
data2["Close"].plot(ax=ax1, lw=2.)
ax1.plot(data2.loc[trades.Trades == 2.0].index, data2.total[trades.Trades == 2.0],
'^', markersize=10, color='m')
ax1.plot(data2.loc[trades.Trades == 3.0].index,
data2.total[trades.Trades == 3.0],
'v', markersize=10, color='k')
plt.show()
import pandas as pd
import io
import matplotlib.pyplot as plt
data2 = pd.read_csv(io.StringIO(""" Close
2015-08-28 113.290001
2015-08-31 112.760002
2015-09-01 107.720001
2015-09-02 112.339996
2015-09-03 110.370003
2015-09-04 109.269997
2015-09-08 112.309998
2015-09-09 110.150002
2015-09-10 112.570000
2015-09-11 114.209999"""), sep="\s+")
trades = pd.read_csv(io.StringIO(""" Trades
2015-08-28 3.0
2015-08-31 3.0
2015-09-01 3.0
2015-09-02 3.0
2015-09-03 2.0"""), sep="\s+")
# make sure it's dates
data2 = data2.reset_index().assign(index=lambda x: pd.to_datetime(x["index"])).set_index("index")
trades = trades.reset_index().assign(index=lambda x: pd.to_datetime(x["index"])).set_index("index")
fig = plt.figure()
ax1 = fig.add_subplot(111, ylabel='Portfolio value in $')
data2["Close"].plot(ax=ax1, lw=2.)
mask2 = data2.index.isin((trades.Trades == 2.0).index)
mask3 = data2.index.isin((trades.Trades == 3.0).index)
ax1.plot(data2.loc[mask2].index, data2.Close[mask2],
'^', markersize=10, color='m')
ax1.plot(data2.loc[mask3].index,
data2.Close[mask3],
'v', markersize=10, color='k')
plt.show()