Версия 0.17.1 (21 ноября 2015)#
Примечание
Мы с гордостью объявляем, что pandas стал спонсируемым проектом (организация NumFOCUS). Это поможет обеспечить успех разработки pandas как проект мирового класса с открытым исходным кодом.
Это минорный релиз с исправлениями ошибок от версии 0.17.0, включающий большое количество исправлений ошибок, а также несколько новых функций, улучшений и оптимизаций производительности. Мы рекомендуем всем пользователям обновиться до этой версии.
Основные моменты включают:
Поддержка условного HTML-форматирования, см. здесь
Освобождение GIL в csv reader и других операциях, см. здесь
Исправлена регрессия в
DataFrame.drop_duplicatesс версии 0.16.2, вызывая некорректные результаты для целочисленных значений (GH 11376)
Что нового в v0.17.1
Новые возможности#
Условное HTML-форматирование#
Предупреждение
Это новая функция, находящаяся в активной разработке. Мы будем добавлять функции и, возможно, вносить критические изменения в будущих выпусках. Отзывы приветствуются в GH 11610
Мы добавили экспериментальный поддержка условного HTML-форматирования:
визуальное оформление DataFrame на основе данных.
Оформление осуществляется с помощью HTML и CSS.
Доступ к классу styler через pandas.DataFrame.style, атрибут, экземпляр Styler с прикрепленными вашими данными.
Вот краткий пример:
In [1]: np.random.seed(123) In [2]: df = pd.DataFrame(np.random.randn(10, 5), columns=list("abcde")) In [3]: html = df.style.background_gradient(cmap="viridis", low=0.5)
Мы можем отрендерить HTML, чтобы получить следующую таблицу.
| a | b | c | d | e | |
|---|---|---|---|---|---|
| 0 | -1.085631 | 0.997345 | 0.282978 | -1.506295 | -0.5786 |
| 1 | 1.651437 | -2.426679 | -0.428913 | 1.265936 | -0.86674 |
| 2 | -0.678886 | -0.094709 | 1.49139 | -0.638902 | -0.443982 |
| 3 | -0.434351 | 2.20593 | 2.186786 | 1.004054 | 0.386186 |
| 4 | 0.737369 | 1.490732 | -0.935834 | 1.175829 | -1.253881 |
| 5 | -0.637752 | 0.907105 | -1.428681 | -0.140069 | -0.861755 |
| 6 | -0.255619 | -2.798589 | -1.771533 | -0.699877 | 0.927462 |
| 7 | -0.173636 | 0.002846 | 0.688223 | -0.879536 | 0.283627 |
| 8 | -0.805367 | -1.727669 | -0.3909 | 0.573806 | 0.338589 |
| 9 | -0.01183 | 2.392365 | 0.412912 | 0.978736 | 2.238143 |
Styler хорошо взаимодействует с Jupyter Notebook.
См. документация подробнее.
Улучшения#
DatetimeIndexтеперь поддерживает преобразование в строки сastype(str)(GH 10442)Поддержка
compression(gzip/bz2) вpandas.DataFrame.to_csv()(GH 7615)pd.read_*функции теперь также могут приниматьpathlib.Path, илиpy:py._path.local.LocalPathобъекты дляfilepath_or_bufferаргумент. (GH 11033) - TheDataFrameиSeriesфункции.to_csv(),.to_html()и.to_latex()теперь может обрабатывать пути, начинающиеся с тильды (например,~/Documents/) (GH 11438)DataFrameтеперь использует поляnamedtupleв качестве столбцов, если столбцы не предоставлены (GH 11181)DataFrame.itertuples()теперь возвращаетnamedtupleобъекты, когда это возможно. (GH 11269, GH 11625)Добавлен
axvlines_kwdsк графику параллельных координат (GH 10709)Опция для
.info()и.memory_usage()для обеспечения глубокого интроспективного анализа потребления памяти. Обратите внимание, что это может быть дорогостоящим для вычисления и поэтому является необязательным параметром. (GH 11595)In [4]: df = pd.DataFrame({"A": ["foo"] * 1000}) # noqa: F821 In [5]: df["B"] = df["A"].astype("category") # shows the '+' as we have object dtypes In [6]: df.info()
RangeIndex: 1000 entries, 0 to 999 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 A 1000 non-null object 1 B 1000 non-null category dtypes: category(1), object(1) memory usage: 9.0+ KB # we have an accurate memory assessment (but can be expensive to compute this) In [7]: df.info(memory_usage="deep") RangeIndex: 1000 entries, 0 to 999 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 A 1000 non-null object 1 B 1000 non-null category dtypes: category(1), object(1) memory usage: 59.9 KB Indexтеперь имеетfillnaметод (GH 10089)In [8]: pd.Index([1, np.nan, 3]).fillna(2) Out[8]: Index([1.0, 2.0, 3.0], dtype='float64')
Series типа
categoryтеперь делает.str.<...>и.dt.<...>методы доступа / свойства доступны, если категории относятся к этому типу. (GH 10661)In [9]: s = pd.Series(list("aabb")).astype("category") In [10]: s Out[10]: 0 a 1 a 2 b 3 b Length: 4, dtype: category Categories (2, object): ['a', 'b'] In [11]: s.str.contains("a") Out[11]: 0 True 1 True 2 False 3 False Length: 4, dtype: bool In [12]: date = pd.Series(pd.date_range("1/1/2015", periods=5)).astype("category") In [13]: date Out[13]: 0 2015-01-01 1 2015-01-02 2 2015-01-03 3 2015-01-04 4 2015-01-05 Length: 5, dtype: category Categories (5, datetime64[ns]): [2015-01-01, 2015-01-02, 2015-01-03, 2015-01-04, 2015-01-05] In [14]: date.dt.day Out[14]: 0 1 1 2 2 3 3 4 4 5 Length: 5, dtype: int32
pivot_tableтеперь имеетmargins_nameаргумент, чтобы можно было использовать что-то отличное от значения по умолчанию ‘All’ (GH 3335)Реализовать экспорт
datetime64[ns, tz]типы данных с фиксированным хранилищем HDF5 (GH 11411)Красивый вывод множеств (например, в ячейках DataFrame) теперь использует синтаксис литералов множеств (
{x, y}) вместо устаревшего синтаксиса Python (set([x, y])) (GH 11215)Улучшить сообщение об ошибке в
pandas.io.gbq.to_gbq()когда потоковая вставка завершается неудачей (GH 11285) и когда DataFrame не соответствует схеме таблицы назначения (GH 11359)
Изменения API#
raise
NotImplementedErrorвIndex.shiftдля неподдерживаемых типов индексов (GH 8038)minиmaxредукции наdatetime64иtimedelta64серии с типом данных теперь приводят кNaTи неnan(GH 11245).Индексирование с нулевым ключом вызовет
TypeError, вместоValueError(GH 11356)Series.ptpтеперь по умолчанию игнорирует пропущенные значения (GH 11163)
Устаревшие функции#
Улучшения производительности#
Проверка монотонности перед сортировкой по индексу (GH 11080)
Series.dropnaулучшение производительности, когда его тип данных не может содержатьNaN(GH 11159)Освободить GIL для большинства операций с полями даты и времени (например,
DatetimeIndex.year,Series.dt.year), нормализация и преобразование в и изPeriod,DatetimeIndex.to_periodиPeriodIndex.to_timestamp(GH 11263)Освобождение GIL в некоторых алгоритмах скользящего окна:
rolling_median,rolling_mean,rolling_max,rolling_min,rolling_var,rolling_kurt,rolling_skew(GH 11450)Освободить GIL при чтении и парсинге текстовых файлов в
read_csv,read_table(GH 11272)Улучшена производительность
rolling_median(GH 11450)Улучшена производительность
to_excel(GH 11352)Ошибка производительности в repr для
Categoricalкатегории, которые отображали строки перед их обрезкой для показа (GH 11305)Улучшение производительности в
Categorical.remove_unused_categories, (GH 11643).Улучшена производительность
Seriesконструктор без данных иDatetimeIndex(GH 11433)Улучшена производительность
shift,cumprod, иcumsumс groupby (GH 4095)
Исправления ошибок#
SparseArray.__iter__()теперь не вызываетPendingDeprecationWarningв Python 3.5 (GH 11622)Регрессия с версии 0.16.2 для форматирования вывода длинных чисел с плавающей точкой/nan, восстановлена в (GH 11302)
Series.sort_index()теперь корректно обрабатываетinplaceопция (GH 11402)Неправильно распределенный .c файл в сборке на
PyPiпри чтении csv с числами с плавающей точкой и передачеna_values= scalar>будет показывать исключение (GH 11374)Ошибка в
.to_latex()вывод нарушен, когда индекс имеет имя (GH 10660)Ошибка в
HDFStore.appendсо строками, чья закодированная длина превышала максимальную незакодированную длину (GH 11234)Ошибка при слиянии
datetime64[ns, tz]типы данных (GH 11405)Ошибка в
HDFStore.selectпри сравнении со скаляром numpy в условии where (GH 11283)Ошибка при использовании
DataFrame.ixс индексатором MultiIndex (GH 11372)Ошибка в
date_rangeс неоднозначными конечными точками (GH 11626)Запретить добавление новых атрибутов к аксессорам
.str,.dtи.cat. Получение такого значения было невозможно, поэтому выдать ошибку при установке. (GH 10673)Ошибка в преобразованиях часовых поясов с неоднозначным временем и
.dtаксессоры (GH 11295)Ошибка в форматировании вывода при использовании индекса неоднозначных времен (GH 11619)
Ошибка в сравнениях Series с list-likes (GH 11339)
Ошибка в
DataFrame.replaceсdatetime64[ns, tz]и несовместимый to_replace (GH 11326, GH 11153)Ошибка в
isnullгдеnumpy.datetime64('NaT')вnumpy.arrayне был определён как null(GH 11206)Ошибка при индексировании по списку со смешанным целочисленным Index (GH 11320)
Ошибка в
pivot_tableсmargins=Trueкогда индексы имеютCategoricalтип данных (GH 10993)Ошибка в
DataFrame.plotнельзя использовать шестнадцатеричные строки цветов (GH 10299)Регрессия в
DataFrame.drop_duplicatesс версии 0.16.2, вызывая некорректные результаты для целочисленных значений (GH 11376)Ошибка в
pd.evalгде унарные операции в списке вызывают ошибку (GH 11235)Ошибка в
squeeze()с массивами нулевой длины (GH 11230, GH 8999)Ошибка в
describe()удаление имён столбцов для иерархических индексов (GH 11517)Ошибка в
DataFrame.pct_change()не распространяетсяaxisключевое слово на.fillnaметод (GH 11150)Ошибка в
.to_csv()когда передаётся смесь целочисленных и строковых имён столбцов в качествеcolumnsпараметр (GH 11637)Ошибка при индексации с
range, (GH 11652)Ошибка в определении скаляров numpy и сохранении типа данных при установке столбцов (GH 11638)
Ошибка в
to_sqlиспользование имен столбцов в Unicode вызывает UnicodeEncodeError с (GH 11431).Исправлена регрессия в установке
xticksвplot(GH 11529).Ошибка в
holiday.datesгде правила соблюдения не могли быть применены к празднику и улучшению документации (GH 11477, GH 11533)Исправить проблемы построения графиков при наличии простых
Axesэкземпляры вместоSubplotAxes(GH 11520, GH 11556).Ошибка в
DataFrame.to_latex()создает дополнительное правило, когдаheader=False(GH 7124)Ошибка в
df.groupby(...).apply(func)когда функция возвращаетSeriesсодержащий новый столбец типа даты/времени (GH 11324)Ошибка в
pandas.jsonкогда загружаемый файл большой (GH 11344)Ошибки в
to_excelс дублирующимися столбцами (GH 11007, GH 10982, GH 10970)Исправлена ошибка, препятствовавшая созданию пустой серии типа данных
datetime64[ns, tz](GH 11245).Ошибка в
read_excelс MultiIndex, содержащим целые числа (GH 11317)Ошибка в
to_excelс openpyxl 2.2+ и слиянием (GH 11408)Ошибка в
DataFrame.to_dict()создаётnp.datetime64объект вместоTimestampкогда в данных присутствует только datetime (GH 11327)Ошибка в
DataFrame.corr()вызывает исключение при вычислении корреляции Кендалла для DataFrame с булевыми и не булевыми столбцами (GH 11560)Ошибка в ошибке времени компоновки, вызванной C
inlineфункции на FreeBSD 10+ (сclang) (GH 10510)Ошибка в
DataFrame.to_csvв передаче аргументов для форматированияMultiIndexes, включаяdate_format(GH 7791)Ошибка в
DataFrame.join()сhow='right'производяTypeError(GH 11519)Ошибка в
Series.quantileс пустыми результатами списка имеетIndexсobjectтип данных (GH 11588)Ошибка в
pd.mergeприводит к пустомуInt64IndexвместоIndex(dtype=object)когда результат слияния пуст (GH 11588)Ошибка в
Categorical.remove_unused_categoriesпри наличииNaNзначения (GH 11599)Ошибка в
DataFrame.to_sparse()теряет имена столбцов для MultiIndex (GH 11600)Ошибка в
DataFrame.round()с неуникальным индексом столбцов, вызывающее фатальную ошибку Python (GH 11611)Ошибка в
DataFrame.round()сdecimalsнеуникальный индексированный Series, создающий дополнительные столбцы (GH 11618)
Участники#
Всего 63 человека внесли патчи в этот выпуск. Люди с «+» рядом с именами внесли патч впервые.
Александр Дрозд +
Alex Chase +
Anthonios Partheniou
BrenBarn +
Brian J. McGuirk +
Chris
Christian Berendt +
Кристиан Перес +
Cody Piersall +
Эксперт по данным и коду, экспериментирующий с кодом на данных
DrIrv +
Evan Wright
Guillaume Gay
Hamed Saljooghinejad +
Iblis Lin +
Jake VanderPlas
Ян Шульц
Jean-Mathieu Deschenes +
Jeff Reback
Джимми Каллин +
Joris Van den Bossche
K.-Michael Aye
Ka Wo Chen
Loïc Séguin-C +
Luo Yicheng +
Magnus Jöud +
Manuel Leonhardt +
Мэттью Гилберт
Maximilian Roos
Michael +
Nicholas Stahl +
Nicolas Bonnotte +
Pastafarianist +
Петра Чонг +
Phil Schaf +
Philipp A +
Rob deCarvalho +
Roman Khomenko +
Rémy Léone +
Sebastian Bank +
Sinhrks
Stephan Hoyer
Thierry Moisan
Tom Augspurger
Tux1 +
Varun +
Wieland Hoffmann +
Winterflower
Yoav Ram +
Younggun Kim
Zeke +
ajcr
azuranski +
behzad nouri
cel4
emilydolson +
hironow +
лексический
llllllllll +
rockg
silentquasar +
sinhrks
taeold +