<p>我同意RafaelC的观点,用NaN填充2018年的数据是最好的方法。您可以使用Numpy中的<code>np.nan</code>(自从有了Pandas之后,您就已经安装了Numpy)来生成nan。你知道吗</p>
<pre><code>import pandas as pd
import numpy as np
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
index_yrs = [2016, 2017, 2018]
</code></pre>
<p>作为对代码的一个小改动,我将所有三年的数据放入了一个<code>years</code>列表中,我们可以将其作为<code>data</code>参数传递给pd.数据帧. 这样就不需要将每一行附加到前一行。你知道吗</p>
<pre><code>r2016 = [26, 27, 25, 22, 20, 23, 22, 20, 20, 18, 18, 19]
r2017 = [20, 21, 18, 16, 15, 15, 15, 15, 13, 13, 14, 15]
r2018 = [16, 18, 18, 18, 17]
years = [r2016] + [r2017] + [r2018]
</code></pre>
<p>这是年份的样子:[[26,27,25,22,20,23,22,20,20,18,18,19],
[20, 21, 18, 16, 15, 15, 15, 15, 13, 13, 14, 15],
[16, 18, 18, 18, 17]]. 你知道吗</p>
<p>至于用NaN填充你的2018年,像这样的东西可能会奏效。我们只是确保如果一年只有前n个月的值,那么剩下的几个月将用nan填充。你知道吗</p>
<pre><code>for year in years:
if len(year) < 12:
year.extend([np.nan] * (12 - len(year)))
</code></pre>
<p>最后,我们可以使用下面的一行代码来创建数据帧,而不是逐行追加。你知道吗</p>
<pre><code>df = pd.DataFrame(years, columns=months, index=index_yrs).astype(float)
</code></pre>
<p>输出:</p>
<pre><code> Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2016 26.0 27.0 25.0 22.0 20.0 23.0 22.0 20.0 20.0 18.0 18.0 19.0
2017 20.0 21.0 18.0 16.0 15.0 15.0 15.0 15.0 13.0 13.0 14.0 15.0
2018 16.0 18.0 18.0 18.0 17.0 NaN NaN NaN NaN NaN NaN NaN
</code></pre>
<p>您可能注意到,我使用<code>.astype(float)</code>将数据帧中的值的数据类型转换为float。我这样做是为了使所有列都具有相同的数据类型。如果我们不调用<code>.astype(float)</code>,那么Jan-May将是数据类型<code>int</code>,Jun-Dec将是数据类型<code>float64</code>。你知道吗</p>