Pandas / matplotlib отображает не все данные столбца - PullRequest
0 голосов
/ 16 мая 2018

У меня есть фрейм данных с именем «бла», который был создан следующим образом:

blah = pandas.read_csv(address, index_col='Date', parse_dates=True)
blah.head()
                 TransactionName  Withdrawal  Deposit    Total
Date                                                          
2016-12-01  PTS TO:  #######           10.00      NaN  2612.27
2016-12-01  ###############           250.00      NaN  2362.27
2016-12-01  SSV TO:  ###########        1.00      NaN  2361.27
2016-12-01  ###############            62.86      NaN  2298.41
2016-12-02  SSV TO:  ###########        2.00      NaN  2296.41

Я хочу построить Депозиты против Даты.Theres ~ 790 строк Deposit, только 57 имеют значения, все остальное в 'NaN'.

blah['Deposit'].plot()

Эта команда выводит этот график: Crappy plot

Проблемаэтот участок не имеет всех депозитов на нем.Если я создаю Серию, затем отбрасываю все NaN и строю график, все в порядке:

derp = blah['Deposit'].dropna()
derp.plot()

Здесь вы можете увидеть всю активность депоистов.Обратите внимание на депозиты после 2017-12, которые не отображаются в оригинале. Хороший график

Почему не все значения отображаются в первом случае?Если я создаю «бла» без установки даты в качестве столбца индекса.Проблема сохраняется.За исключением того, что вместо графика «Дата» график строится против индекса строки #.

Моя цель - построить столбцы «Итого», «Вывод средств» и «Депозит» на одном графике с датой.Оба других столбца в порядке с командой:

blah['Total'].plot() 
blah['Withdrawal'].plot()

1 Ответ

0 голосов
/ 16 мая 2018

NaN всегда прерывает сюжетную линию:

Поскольку NaN все еще существует в данных, линия будет прервана. Панды не знают, как провести линию через NaN, поэтому можно наносить только последовательные числовые значения. Вы должны удалить NaN, чтобы линия продолжила весь путь через действительные данные. Если вы начертите точки, вы увидите все.

Вот ССЫЛКА на похожий, но другой вопрос о построении NaN, где в ответе упоминается проблема с построением линии через NaN.

Воспроизводимый пример:

import random
import pandas as pd
import numpy as np

c = [np.nan] * 10
c.extend(random.sample(range(100), 10))
random.shuffle(c)

d = {"a":random.sample(range(100), 20), "b":random.sample(range(100), 20), "c":c}

df = pd.DataFrame(d)

derp.plot(style="-o") # both points and line to show all values

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