Python выводит выбранные столбцы CSV - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть файл *.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 и нет пропущенных данных.

Ценю любую помощь, которую я могу получить, спасибо!

1 Ответ

0 голосов
/ 05 ноября 2018

Используемый формат файла действительно неудачный. Сначала у вас есть пустая строка между заголовком и данными, поэтому вам нужно пропустить первые две строки и не можете использовать заголовок.
Далее у вас есть два пробела в качестве разделителя между некоторыми столбцами, а также между строками, которые должны быть одним столбцом.

Теперь, если вам действительно нужно использовать этот файл как есть, и вы хотите использовать 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()

Если использовать панд вместо 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...