python-3.x - python绘制选定的csv列
问题描述
我有一个*.csv
包含数据的文件,其中包括"YYYY-MM"
第一列格式的日期、第二列上的字母和两列数据。
它看起来像这样:
Date inflation rate CPI-Value LIBOR-Rate
2003-09 inflation rate 80.172 0.81
2003-10 inflation rate 80.132 0.88
2003-11 inflation rate 80.264 0.69
2003-12 inflation rate 80.430 0.75
2004-01 inflation rate 81.163 0.75
2004-02 inflation rate 81.244 0.75
2004-03 inflation rate 81.344 0.75
2004-04 inflation rate 81.436 0.75
2004-05 inflation rate 81.501 0.75
2004-06 inflation rate 81.355 0.81
2004-07 inflation rate 81.494 1.06
2004-08 inflation rate 81.426 1.31
2004-09 inflation rate 81.771 1.44
2004-10 inflation rate 81.757 1.38
2004-11 inflation rate 81.866 1.38
2004-12 inflation rate 81.790 1.44
2005-01 inflation rate 81.994 1.75
2005-02 inflation rate 82.062 1.94
2005-03 inflation rate 82.210 2.13
2005-04 inflation rate 82.219 2.13
2005-05 inflation rate 82.165 2.06
我想绘制一张以日期为 x 轴的折线图,以及一张包含 CPI 和 LIBOR 值的图。
我试过使用
x, y = np.genfromtxt(CPI_df, usecols=(0, 2), unpack=True, delimiter=',')
plt.plot(x, y, 'ro--')
plt.show()
但是有一个值错误说某些行有一列而不是两列。但是,我已经检查了 csv 文件并且没有丢失数据。
感谢我能得到的任何帮助,谢谢!
解决方案
使用的文件格式真的很不幸。首先,标题和数据之间有一个空行,因此您需要跳过前两行并且不能使用标题。
接下来,您有两个空格作为某些列之间的分隔符,但也有作为单列的字符串之间的分隔符。
现在如果你真的需要按原样使用这个文件,并且想使用 numpy 来读取它,你也会遇到第一列不包含数值的问题。因此,您将需要使用 dtype。
以下将读取文件并将日期绘制为字符串。
import numpy as np
import matplotlib.pyplot as plt
a = np.genfromtxt("data/inflation.txt", usecols=(0, 3), skip_header=2, dtype=None, encoding=None)
x = a["f0"]
y = a["f1"]
plt.plot(x, y, 'ro--')
plt.show()
或者,如果您想改为绘制日期,
import numpy as np
import datetime
import matplotlib.pyplot as plt
a = np.genfromtxt("data/inflation.txt", usecols=(0, 3), skip_header=2, dtype=None, encoding=None,
converters={0: lambda x: datetime.datetime.strptime(x, "%Y-%m")}, unpack=True)
x = a["f0"]
y = a["f1"]
plt.plot(x, y, 'ro--')
plt.show()
如果使用 pandas 而不是 numpy,这会变得更容易一些。绘制字符串:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("data/inflation.txt", delim_whitespace=True)
plt.plot(df["Date"], df["CPI-Value"], 'ro--')
plt.show()
或绘制日期:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("data/inflation.txt", delim_whitespace=True,
parse_dates=[0], infer_datetime_format=True)
plt.plot(df["Date"], df["CPI-Value"], 'ro--')
plt.show()
推荐阅读
- python - 使用过滤器处理素数和奇数 Python 的高阶函数
- meteor - 提供反应数据源
- node.js - 无法使用我的 PC IP 地址访问 Mongodb Atlas
- java - 匹配 html 标签字符串时的错误值
- javascript - how to pass values from a formgroup to another formgroup realtime as a two way data binding in a reactive form?
- python - 我想用python制作基本的房地产脚本
- python - 如何找到具有一些缺失值的数据帧的每一行的总和
- javascript - 在引用变量中更改时原始数组未更新
- file - 如何使用 IO::Compress::Zip 在 perl 中压缩文件
- javascript - 错误:部署谷歌云功能时找不到模块“firebase/app”