Версия 0.15.2 (12 декабря 2014 г.)#
Это минорный релиз от версии 0.15.1, включающий большое количество исправлений ошибок, а также несколько новых функций, улучшений и оптимизаций производительности. Небольшое количество изменений API было необходимо для исправления существующих ошибок. Мы рекомендуем всем пользователям обновиться до этой версии.
Изменения API#
Индексирование в
MultiIndexза пределами глубины лексической сортировки теперь поддерживается, хотя лексически отсортированный индекс будет иметь лучшую производительность. (GH 2646)In [1]: df = pd.DataFrame({'jim':[0, 0, 1, 1], ...: 'joe':['x', 'x', 'z', 'y'], ...: 'jolie':np.random.rand(4)}).set_index(['jim', 'joe']) ...: In [2]: df Out[2]: jolie jim joe 0 x 0.126970 x 0.966718 1 z 0.260476 y 0.897237 [4 rows x 1 columns] In [3]: df.index.lexsort_depth Out[3]: 1 # in prior versions this would raise a KeyError # will now show a PerformanceWarning In [4]: df.loc[(1, 'z')] Out[4]: jolie jim joe 1 z 0.260476 [1 rows x 1 columns] # lexically sorting In [5]: df2 = df.sort_index() In [6]: df2 Out[6]: jolie jim joe 0 x 0.126970 x 0.966718 1 y 0.897237 z 0.260476 [4 rows x 1 columns] In [7]: df2.index.lexsort_depth Out[7]: 2 In [8]: df2.loc[(1,'z')] Out[8]: jolie jim joe 1 z 0.260476 [1 rows x 1 columns]
Ошибка в unique для Series с
categorydtype, который возвращал все категории независимо от того, были ли они "использованы" или нет (см. GH 8559 для обсуждения). Предыдущее поведение заключалось в возврате всех категорий:In [3]: cat = pd.Categorical(['a', 'b', 'a'], categories=['a', 'b', 'c']) In [4]: cat Out[4]: [a, b, a] Categories (3, object): [a < b < c] In [5]: cat.unique() Out[5]: array(['a', 'b', 'c'], dtype=object)
Теперь возвращаются только категории, которые действительно встречаются в массиве:
In [1]: cat = pd.Categorical(['a', 'b', 'a'], categories=['a', 'b', 'c']) In [2]: cat.unique() Out[2]: ['a', 'b'] Categories (3, object): ['a', 'b', 'c']
Series.allиSeries.anyтеперь поддерживаютlevelиskipnaпараметры.Series.all,Series.any,Index.all, иIndex.anyбольше не поддерживаетoutиkeepdimsпараметры, которые существовали для совместимости с ndarray. Различные типы индексов больше не поддерживаютallиanyфункции агрегации и теперь вызоветTypeError. (GH 8302).Разрешить сравнение на равенство Series с категориальным типом данных и типом object; ранее это вызывало
TypeError(GH 8938)Ошибка в
NDFrame: конфликтующие имена атрибутов/столбцов теперь ведут себя последовательно между получением и установкой. Ранее, когда и столбец, и атрибут с именемyсуществовал,data.yвернул бы атрибут, в то время какdata.y = zобновит колонку (GH 8994)In [3]: data = pd.DataFrame({'x': [1, 2, 3]}) In [4]: data.y = 2 In [5]: data['y'] = [2, 4, 6] In [6]: data Out[6]: x y 0 1 2 1 2 4 2 3 6 [3 rows x 2 columns] # this assignment was inconsistent In [7]: data.y = 5
Старое поведение:
In [6]: data.y Out[6]: 2 In [7]: data['y'].values Out[7]: array([5, 5, 5])
Новое поведение:
In [8]: data.y Out[8]: 5 In [9]: data['y'].values Out[9]: array([2, 4, 6])
Timestamp('now')теперь эквивалентноTimestamp.now()в том, что возвращает локальное время, а не UTC. Также,Timestamp('today')теперь эквивалентноTimestamp.today()и оба имеютtzкак возможный аргумент. (GH 9000)Исправлена поддержка отрицательного шага для срезов на основе меток (GH 8753)
Старое поведение:
In [1]: s = pd.Series(np.arange(3), ['a', 'b', 'c']) Out[1]: a 0 b 1 c 2 dtype: int64 In [2]: s.loc['c':'a':-1] Out[2]: c 2 dtype: int64
Новое поведение:
In [10]: s = pd.Series(np.arange(3), ['a', 'b', 'c']) In [11]: s.loc['c':'a':-1] Out[11]: c 2 b 1 a 0 Length: 3, dtype: int64
Улучшения#
Categorical улучшения:
Добавлена возможность экспорта категориальных данных в Stata (GH 8633). См. здесь для ограничений категориальных переменных, экспортируемых в файлы данных Stata.
Добавлен флаг
order_categoricalstoStataReaderиread_stataдля выбора, упорядочивать ли импортированные категориальные данные (GH 8836). См. здесь для получения дополнительной информации об импорте категориальных переменных из файлов данных Stata.Добавлена возможность экспорта категориальных данных в/из HDF5 (GH 7621). Запросы работают так же, как если бы это был массив объектов. Однако,
categoryданные с типом dtype хранятся более эффективным способом. См. здесь для примера и предостережений относительно предыдущих версий pandas.Добавлена поддержка для
searchsorted()наCategoricalкласс (GH 8420).
Другие улучшения:
Добавлена возможность указать SQL-тип столбцов при записи DataFrame в базу данных (GH 8778). Например, указание использовать sqlalchemy
Stringтип вместо стандартногоTextтип для строковых столбцов:from sqlalchemy.types import String data.to_sql('data_dtype', engine, dtype={'Col_1': String}) # noqa F821
Series.allиSeries.anyтеперь поддерживаютlevelиskipnaпараметры (GH 8302):>>> s = pd.Series([False, True, False], index=[0, 0, 1]) >>> s.any(level=0) 0 True 1 False dtype: bool
Panelтеперь поддерживаетallиanyфункции агрегации. (GH 8302):>>> p = pd.Panel(np.random.rand(2, 5, 4) > 0.1) >>> p.all() 0 1 2 3 0 True True True True 1 True False True True 2 True True True True 3 False True False True 4 True True True True
Добавлена поддержка для
utcfromtimestamp(),fromtimestamp(), иcombine()наTimestampкласс (GH 5351).Добавлена Google Analytics (pandas.io.ga) базовая документация (GH 8835). См. здесь.
Timedeltaарифметические операции возвращаютNotImplementedв неизвестных случаях, позволяя расширения пользовательскими классами (GH 8813).Timedeltaтеперь поддерживает арифметические операции сnumpy.ndarrayобъекты соответствующего типа данных (только для numpy 1.8 или новее) (GH 8884).Добавлен
Timedelta.to_timedelta64()метод в публичный API (GH 8884).Добавлен
gbq.generate_bq_schema()функцию в модуль gbq (GH 8325).Seriesтеперь работает с объектами map так же, как с генераторами (GH 8909).Добавлен контекстный менеджер для
HDFStoreдля автоматического закрытия (GH 8791).to_datetimeполучаетexactключевое слово, позволяющее формату не требовать точного совпадения с предоставленной строкой формата (если егоFalse).exactпо умолчаниюTrue(означает, что точное сопоставление по-прежнему используется по умолчанию) (GH 8904)Добавлен
axvlinesлогическая опция для функции parallel_coordinates plot, определяет, будут ли печататься вертикальные линии, по умолчанию TrueДобавлена возможность чтения нижних колонтитулов таблиц в read_html (GH 8552)
to_sqlтеперь определяет типы данных не-NA значений для столбцов, которые содержат NA значения и имеют dtypeobject(GH 8778).
Производительность#
Снижение использования памяти, когда skiprows является целым числом в read_csv (GH 8681)
Ускорение производительности для
to_datetimeпреобразования с переданнымformat=должны быть включены в старые категории. Значения, которые были в удаленных категориях, будут установлены в NaNexact=False(GH 8904)
Исправления ошибок#
Ошибка в объединении Series с
categorydtype, которые приводили кobject. (GH 8641)Ошибка в операции Timestamp-Timestamp, не возвращающей тип Timedelta, и операциях с датами с часовыми поясами (GH 8865)
Исправлено несоответствие исключений часовых поясов (либо работа с tz и None, либо несовместимые часовые пояса), теперь будет возвращаться
TypeErrorвместоValueError(только несколько крайних случаев), (GH 8865)Ошибка при использовании
pd.Grouper(key=...)без уровня/оси или только с уровнем (GH 8795, GH 8866)Сообщить об
TypeErrorкогда переданы недопустимые/отсутствующие параметры в groupby (GH 8015)Ошибка при упаковке pandas с
py2app/cx_Freeze(GH 8602, GH 8831)Ошибка в
groupbyсигнатуры, которые не включали *args или **kwargs (GH 8733).io.data.Optionsтеперь вызываетRemoteDataErrorкогда даты истечения недоступны от Yahoo и когда не получены данные от Yahoo (GH 8761), (GH 8783).Неясное сообщение об ошибке при разборе csv при передаче dtype и names и разобранные данные имеют другой тип данных (GH 8833)
Ошибка при срезе MultiIndex с пустым списком и хотя бы одним булевым индексатором (GH 8781)
io.data.Optionsтеперь вызываетRemoteDataErrorкогда даты истечения недоступны от Yahoo (GH 8761).Timedeltakwargs теперь могут быть numpy ints и floats (GH 8757).Исправлены несколько существующих ошибок для
Timedeltaарифметические операции и сравнения (GH 8813, GH 5963, GH 5436).sql_schemaтеперь генерирует соответствующий диалектCREATE TABLEоператоры (GH 8697)sliceстроковый метод теперь учитывает шаг (GH 8754)Ошибка в
BlockManagerгде установка значений с разным типом нарушит целостность блока (GH 8850)Ошибка в
DatetimeIndexпри использованииtimeобъект как ключ (GH 8667)Ошибка в
mergeгдеhow='left'иsort=Falseне сохранит порядок левого фрейма (GH 7331)Ошибка в
MultiIndex.reindexгде переиндексация на уровне не переупорядочивала метки (GH 4088)Ошибка в некоторых операциях с часовыми поясами dateutil, проявляющаяся в dateutil 2.3 (GH 8639)
Регрессия в итерации DatetimeIndex с фиксированным/локальным смещением часового пояса (GH 8890)
Ошибка в
to_datetimeпри разборе наносекунд с использованием%fформат (GH 8989)io.data.Optionsтеперь вызываетRemoteDataErrorкогда даты истечения недоступны от Yahoo и когда не получены данные от Yahoo (GH 8761), (GH 8783).Исправление: Размер шрифта устанавливался только на оси x при вертикальной ориентации или на оси y при горизонтальной. (GH 8765)
Исправлено деление на 0 при чтении больших csv-файлов в python 3 (GH 8621)
Ошибка при выводе MultiIndex с
to_html,index=Falseчто добавляло бы дополнительный столбец (GH 8452)Импортированные категориальные переменные из файлов Stata сохраняют порядковую информацию в исходных данных (GH 8836).
Определено
.sizeатрибут черезNDFrameобъектов для обеспечения совместимости с numpy >= 1.9.1; содержит ошибки сnp.array_split(GH 8846)Пропустить тестирование гистограмм для matplotlib <= 1.2 (GH 8648).
Ошибка, где
get_data_googleвозвращаемые типы данных объектов (GH 3995)Ошибка в
DataFrame.stack(..., dropna=False)когда DataFramecolumnsявляетсяMultiIndexчейlabelsне ссылаются на все егоlevels. (GH 8844)Ошибка в том, что контекст Option применялся на
__enter__(GH 8514)Ошибка в resample, вызывающая ValueError при передискретизации за несколько дней и последнее смещение не рассчитывается с начала диапазона (GH 8683)
Ошибка, где
DataFrame.plot(kind='scatter')ошибка при проверке, находится ли np.array в DataFrame (GH 8852)Ошибка в
pd.infer_freq/DataFrame.inferred_freqчто препятствовало правильному определению частоты менее суток, когда индекс содержал дни перехода на летнее время (GH 8772).Ошибка, при которой имя индекса всё ещё использовалось при построении графика серии с
use_index=False(GH 8558).Ошибки при попытке сложить несколько столбцов, когда некоторые (или все) имена уровней являются числами (GH 8584).
Ошибка в
MultiIndexгде__contains__возвращает неверный результат, если индекс не отсортирован лексикографически или не уникален (GH 7724)ОШИБКА CSV: исправлена проблема с конечным пробелом в пропущенных строках, (GH 8679), (GH 8661), (GH 8983)
Регрессия в
Timestampне обрабатывает обозначение зоны 'Z' для UTC (GH 8771)Ошибка в
StataWriterпроизводит запись строк длиной 244 символа независимо от фактического размера (GH 8969)Исправлена ошибка ValueError, возникавшая при cummin/cummax, когда Series datetime64 содержит NaT. (GH 8965)
Ошибка в DataReader возвращает тип object, если есть пропущенные значения (GH 8980)
Ошибка при построении графиков, если был включен sharex и индекс был временным рядом, показывала метки на нескольких осях (GH 3964).
Ошибка, при передаче единицы измерения в конструктор TimedeltaIndex применялось двойное преобразование в наносекунды. (GH 9011).
Ошибка в построении графика массива, подобного периоду (GH 9012)
Участники#
Всего 49 человек внесли патчи в этот релиз. Люди со знаком "+" рядом с именами внесли патч впервые.
Aaron Staple
Angelos Evripiotis +
Artemy Kolchinsky
Бенуа Пуанте +
Brian Jacobowski +
Charalampos Papaloizou +
Chris Warth +
David Stephens
Fabio Zanini +
Francesc Via +
Henry Kleynhans +
Jake VanderPlas +
Ян Шульц
Jeff Reback
Jeff Tratner
Joris Van den Bossche
Кевин Шеппард
Мэтт Саггит +
Мэтью Бретт
Филлип Клауд
Руперт Томпсон +
Скотт Э. Ласли +
Stephan Hoyer
Stephen Simmons +
Sylvain Corlay +
Thomas Grainger +
Tiago Antao +
Tom Augspurger
Trent Hauck
Victor Chaves +
Victor Salgado +
Vikram Bhandoh +
WANG Aiyong
Will Holmgren +
behzad nouri
broessli +
charalampos papaloizou +
immerrr
jnmclarty
jreback
mgilbert +
onesandzeroes
peadarcoyle +
rockg
seth-p
sinhrks
unutbu
wavedatalab +
Åsmund Hjulstad +