我正在尝试从CSV文件中将年度数据读取到Pandas数据框中,但是无法正确读取年份。我认为问题在于我必须转置行和列。
这是一个显示问题的简化示例。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<dl class="dropdown" id="hiddenDiv">
<dt>
<li>
<span class="hida">ژانر فیلم<span>
<i style="display: block;position: absolute"></i>
</li>
</dt>
<dd>
<div class="mutliSelect">
<ul>
<li><label><input name="product_cat" value="action" type="checkbox"><span>action</span></label></li>
<li><label><input name="product_cat" value="animation" type="checkbox"><span>animation</span></label></li>
<li><label><input name="product_cat" value="history" type="checkbox"><span>history</span></label></li>
<li><label><input name="product_cat" value="horror" type="checkbox"><span>horror</span></label></li>
</ul>
</div>
</dd>
</dl>
这会生成这对图:
我想绘制多年来每种水果的价格,但是我正在读取的数据中每种水果都有一行,每年都有一列。第一张图显示了当我绘制希望的数据时会发生什么。第二幅图显示了在对转置后的数据进行绘图时发生的情况。
为什么第二个图的x轴上未显示年份?数据间隔均匀,所以甚至不读取年份数据吗?
答案 0 :(得分:0)
当年份数据在标题行中时,它似乎已作为字符串读取,因此不能用作x轴的数据。要将年份转换为整数,请在进行转置之前转换列。
from io import StringIO
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sn
# This is what I wish I had.
csv_source1 = StringIO("""\
year,Apples,Bananas,Cherries
1990,1,2,3
1997,1,4,9
1999,1,8,27
""")
df1 = pd.read_csv(csv_source1, index_col=0)
df1.index.names = ['Year']
df1.columns.names = ['fruit']
# This is what I actually have.
csv_source2 = StringIO("""\
fruit,1990,1997,1999
Apples,1,1,1
Bananas,2,4,8
Cherries,3,9,27
""")
# So I transpose it.
df2 = pd.read_csv(csv_source2, index_col=0).T
df2.index.names = ['Year']
sn.set()
ax = plt.subplot(211)
df1.plot(ax=ax)
ax = plt.subplot(212)
df2.plot(ax=ax)
plt.tight_layout()
plt.show()
这是包含更改的完整脚本。
df2 = pd.read_csv(csv_source2, index_col=0)
df2.columns = df2.columns.astype(int)
df2 = df2.T
固定图使它们都相同。