我有一个包含数据的*.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文件,没有丢失数据。
感谢我能得到的任何帮助,谢谢!
发布于 2018-11-06 02:21:48
正在使用的文件格式真的很糟糕。首先,在header和data之间有一个空行,因此需要跳过前两行,并且不能使用header。
接下来,在一些列之间有两个空格作为分隔符,但在应该是单个列的字符串之间也有两个空格。
现在,如果您确实需要按原样使用此文件,并希望使用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()https://stackoverflow.com/questions/53157958
复制相似问题