熊猫数据框无法从CSV绘制x值

时间:2018-06-22 18:31:39

标签: python pandas dataframe matplotlib

我正在尝试从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>

这会生成这对图:

good and bad plots

我想绘制多年来每种水果的价格,但是我正在读取的数据中每种水果都有一行,每年都有一列。第一张图显示了当我绘制希望的数据时会发生什么。第二幅图显示了在对转置后的数据进行绘图时发生的情况。

为什么第二个图的x轴上未显示年份?数据间隔均匀,所以甚至不读取年份数据吗?

1 个答案:

答案 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

固定图使它们都相同。

fixed plots