Q: есть ли способ игнорировать пустые ячейки в CSV-файле, но по-прежнему отображать данные - PullRequest
0 голосов
/ 29 марта 2019

Я делаю персональный проект для школы с использованием Python.Я просто пытаюсь очистить и построить данные из CSV-файла, используя matplotlib.pyplot и pandas.Проблема, с которой я сталкиваюсь, заключается в том, что для пустых ячеек в csv он читает его как 0.

Мои предыдущие попытки исправить это были для удаления всех пустых ячеек в csv, но это (очевидно) даетЯ ошибаюсь, потому что на оси Y нет такого же количества точек, как на оси X.

Данные:

Unix Time

, 1296086400,1297900800,1299542400,132753600,1330992000,1358985600,1360627200,1362441600,1324435200,1392076800,13938912 * 1009баллы эрг (для гребли)

Беккер, 18: 20,6,17: 53,1,18: 06,2,18: 00,3,17: 51,2,18: 05,0,18: 05,3,18: 14,9 ,,, Кейси,19: 14,7,17: 51,2,17: 16,4,17: 18,6,16: 49,3,17: 05,0,17: 02,7,16: 51,2,16: 57,0,16: 57,4,16: 44,2 Фрид, 17: 18,9,17: 00,9,16: 54,1,16: 47,5,16: 34,1,16: 33,0,16: 23,3,16: 22,5,16: 27,0,16: 10,1,16: 15,6 Агнец, 18: 09,6,17: 50,7,17:39,9, 17: 42,9,17: 44,0,17: 35,2 ,,,, Noble, 18: 18,9,17: 42,0,17: 31,2,17: 26,9,17: 14,0,17: 43,0,17: 59,2,17:19,9,17: 25,0,17: 42,7, Voorhees ,, 18: 49,2,18: 19,4,17: 29,8,16: 53,9,17: 07,0,16: 50,6,16: 44,6,16: 50,0,16: 47,3,16: 41.2

'''
first try at dealing with blank cells in the csv file 
doesnt work because the graph needs to have the same amount 
of plot points in the x as it does in the y. 
'''
with open('clean3.csv') as f:
    reader = csv.reader(f)
    header = next(reader)
    dates = cleanLine(header)
    user_list = []  # new list for inputs
    for row in reader:
        scores = []
        for i in range(len(row)):
            if (row[i] != '' ):
                try:
                    errorCheck = float(row[i][:2])  
       # checks if the value of row[i] can be converted to a float
                    scores.append(row[i])
                except:
                    user_list.append(row[i])
        user_list.append(dates)
        user_list.append(scores)

мне нужен график, который не падает до 0 с каждой пустой ячейкой.Я надеюсь сделать так, чтобы пустая ячейка либо игнорировалась (для пробелов между двумя точками), либо просто продолжалась с тем же наклоном (для тех случаев, когда пробелы находятся в конце набора баллов эргономики).

То, что я получаю с этим кодом, является правильной формой, в которой я хочу получить данные, но список значений y (оценки эрг) короче списка значений x (время Unix), поэтому он выиграл 't работает при построении графиков с помощью matplotlib.pyplot.

Если у кого-то есть какие-либо учебные пособия или советы по использованию панд или matplotlib (или других модулей, на которые я должен обратить внимание), чтобы лучше использовать мои данные, которые были бы очень благодарны.Я стараюсь выучить как можно больше, поэтому желательно без ответов.

1 Ответ

0 голосов
/ 29 марта 2019

Возможно, проще всего было бы перебрать столбцы в транспонированном DataFrame и построить их, отбрасывая NA s:

from matplotlib.dates import DateFormatter


df = pd.read_csv('scores.csv', index_col=0)
df = df.T
df.index = pd.to_datetime(df.index, unit='s')

fig, ax = plt.subplots(figsize=(10,8))

fmt = DateFormatter("%M:%S")
ax.yaxis.set_major_formatter(fmt)

for c in df.columns:
    df[c] = pd.to_datetime('1970-01-01 00:' + df[c])
    df[c].dropna().plot(ax=ax, label=c, style='.-')

ax.legend()

Вывод:

chart

PS Я добавил еще один '0' для unix time '132753600', перенеся его в 2012 с 1974 года, чтобы привести его в соответствие с другими записями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...