任何人都可以帮助解释为什么当pandas.DataFrame.
最小的、可重现的示例
import pandas as pd
df = pd.DataFrame(columns=['a', 'b', 'b'])
Run Code Online (Sandbox Code Playgroud)
如果我尝试插入一个列表,column 'a'我会收到一个关于维度不匹配的错误:
df.loc[:, 'a'] = list(range(5))
Traceback (most recent call last):
...
ValueError: cannot copy sequence with size 5 to array axis with dimension 0
Run Code Online (Sandbox Code Playgroud)
类似于'b':
df.loc[:, 'b'] = list(range(5))
Traceback (most recent call last):
...
ValueError: could not broadcast input array from shape (5) into shape (0,2)
Run Code Online (Sandbox Code Playgroud)
但是,如果我插入到一个全新的列中,则不会出现错误,除非我插入'a'或'b':
df.loc[:, 'c'] = list(range(5))
print(df)
a b b c
0 …Run Code Online (Sandbox Code Playgroud) 使用时间线和plotly.express,我可以获得一个有效的甘特图:
import plotly.express as px
import pandas as pd
df = pd.DataFrame([
dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28'),
dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15'),
dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30')
])
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task")
fig.update_yaxes(autorange="reversed") # otherwise tasks are listed from the bottom up
fig.show()
Run Code Online (Sandbox Code Playgroud)
按照这里的建议,我尝试将其添加到子图中shared_xaxes = True
from plotly.subplots import make_subplots
fig_sub = make_subplots(rows=2, shared_xaxes=True)
fig_sub.append_trace(fig['data'][0], row=1, col=1)
fig_sub.append_trace(fig['data'][0], row=2, col=1)
fig_sub.show()
Run Code Online (Sandbox Code Playgroud)
但它将它视为 graph_objects 并且不显示甘特图。
有人有任何解决方法或建议吗?