【问题标题】:Reading excel with Python Pandas and isolating columns/rows to plot使用 Python Pandas 读取 excel 并隔离列/行以进行绘图
【发布时间】:2018-03-29 06:39:36
【问题描述】:

我正在使用 Python pandas read_excel 创建直方图或折线图。我想阅读整个文件。这是一个大文件,我只想在上面绘制某些值。我知道如何在 read_excel 中使用 skiprows 和 parse_cols,但如果我这样做,它不会读取我需要用于轴标签的文件的一部分。我也不知道如何告诉它绘制我想要的 x 值和我想要的 y 值。这是我所拥有的:

df=pd.read_excel('JanRain.xlsx',parse_cols="C:BD")

years=df[0]
precip=df[31:32]
df.plot.bar()

我希望 x 轴是 excel 文件的第 1 行(年),并且我希望条形图中的每个条都是 excel 文件第 31 行的值。我不知道如何隔离这个。用 pandas 阅读然后用 matplotlib 绘图会更容易吗?

这是 excel 文件的示例。第一行是年份,第二列是月份中的天数(此文件仅适用于 1 个月:

【问题讨论】:

  • 您有可以发布的 Excel 电子表格样本吗?

标签: python excel pandas matplotlib


【解决方案1】:

以下是我如何在大型数据框的第 31 行中绘制数据,将第 0 行设置为 x 轴。 (更新答案)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

创建一个 32 行 10 列的随机数组

df = pd.DataFrame(np.random.rand(320).reshape(32,10), columns=range(64,74), index=range(1,33))
df.to_excel(r"D:\data\data.xlsx")

使用“parse_cols”和“skiprows”仅读取您想要的列和行。此示例中的第一列是数据帧索引。

# load desired columns and rows into a dataframe
# in this method, I firse make a list of all skipped_rows
desired_cols = [0] + list(range(2,9))
skipped_rows = list(range(1,33))
skipped_rows.remove(31)
df = pd.read_excel(r"D:\data\data.xlsx", index_col=0, parse_cols=desired_cols, skiprows=skipped_rows)

目前这会产生一个只有一行的数据框。

      65        66       67        68        69        70        71
31  0.310933  0.606858  0.12442  0.988441  0.821966  0.213625  0.254897

只隔离你想要绘制的行,给出一个以原始列标题为索引的 pandas.Series

ser = df.loc[31, :]

绘制系列。

fig, ax = plt.subplots()
ser.plot(ax=ax)
ax.set_xlabel("year")
ax.set_ylabel("precipitation")

fig, ax = plt.subplots()
ser.plot(kind="bar", ax=ax)
ax.set_xlabel("year")
ax.set_ylabel("precipitation")

【讨论】:

  • 这有助于 y 轴!但是我文件中的第一行是写为(64 65 66 ... 14 15 16)的年份。如何让 x 轴显示这个?目前它显示1-37。另外,我不希望有传奇。我只想要所有条的颜色相同。现在写下我的传说恰当地反映了岁月。我希望将图例中的内容显示为 x 轴。
  • 我看到你用 index_cols=0 做了什么,但我基本上想让 x 轴 index_rows=0。我知道 index_rows 无效,但无论如何可以这样做吗?我希望 excel 文件的第一行是我的 x 轴
  • df.ix[0] 会给你第一行。
  • Jonathan 感谢您的 cmets,我更好地理解了这个问题,现在更新的答案应该可以直接回答您的问题。我使用 .loc[31,:] 或 .iloc[0,:] 来隔离感兴趣的行。但是转置 (df.T) 并选择一列也可以完成这项工作。
  • 有没有一种简单的方法可以在此图中添加一条直线,同时仍使用您帮助我编写的代码?例如:我想简单地为该月的降水添加一条平均线。谢谢
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 2021-07-25
  • 2019-05-17
  • 1970-01-01
  • 2012-10-10
  • 2019-01-20
  • 1970-01-01
  • 2020-01-08
相关资源
最近更新 更多