Версия 0.16.0 (22 марта 2015)#
Это основной выпуск с версии 0.15.2 и включает небольшое количество изменений API, несколько новых функций, улучшений и улучшений производительности, а также большое количество исправлений ошибок. Мы рекомендуем всем пользователям обновиться до этой версии.
Основные моменты включают:
DataFrame.assignметод, см. здесьSeries.to_coo/from_cooметоды для взаимодействия сscipy.sparse, см. здесьОбратно несовместимое изменение для
Timedeltaчтобы соответствовать.secondsатрибут сdatetime.timedelta, см. здесьИзменения в
.locAPI срезов для соответствия поведению.ixсм. здесьИзменения в значении по умолчанию для упорядочивания в
Categoricalконструктор, см. здесьУлучшение
.strаксессор для упрощения строковых операций, см. здесьThe
pandas.tools.rplot,pandas.sandbox.qtpandasиpandas.rpyМодули устарели. Мы рекомендуем пользователям обращаться к внешним пакетам, таким как seaborn, pandas-qt и rpy2 для аналогичной или эквивалентной функциональности, см. здесь
Проверьте Изменения API и устаревшие возможности перед обновлением.
Что нового в v0.16.0
Новые возможности#
DataFrame assign#
Вдохновлено dplyr's mutate глагол, DataFrame имеет новый
assign() метод.
Сигнатура функции для assign просто **kwargs. Ключи - это имена столбцов для новых полей, а значения - либо значение для вставки (например, Series или массив NumPy), или функция
одного аргумента, которая будет вызвана на DataFrame. Новые значения вставляются,
и возвращается весь DataFrame (со всеми исходными и новыми столбцами).
In [1]: iris = pd.read_csv('data/iris.data')
In [2]: iris.head()
Out[2]:
SepalLength SepalWidth PetalLength PetalWidth Name
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
[5 rows x 5 columns]
In [3]: iris.assign(sepal_ratio=iris['SepalWidth'] / iris['SepalLength']).head()
Out[3]:
SepalLength SepalWidth PetalLength PetalWidth Name sepal_ratio
0 5.1 3.5 1.4 0.2 Iris-setosa 0.686275
1 4.9 3.0 1.4 0.2 Iris-setosa 0.612245
2 4.7 3.2 1.3 0.2 Iris-setosa 0.680851
3 4.6 3.1 1.5 0.2 Iris-setosa 0.673913
4 5.0 3.6 1.4 0.2 Iris-setosa 0.720000
[5 rows x 6 columns]
Выше был пример вставки предварительно вычисленного значения. Мы также можем передать функцию для вычисления.
In [4]: iris.assign(sepal_ratio=lambda x: (x['SepalWidth']
...: / x['SepalLength'])).head()
...:
Out[4]:
SepalLength SepalWidth PetalLength PetalWidth Name sepal_ratio
0 5.1 3.5 1.4 0.2 Iris-setosa 0.686275
1 4.9 3.0 1.4 0.2 Iris-setosa 0.612245
2 4.7 3.2 1.3 0.2 Iris-setosa 0.680851
3 4.6 3.1 1.5 0.2 Iris-setosa 0.673913
4 5.0 3.6 1.4 0.2 Iris-setosa 0.720000
[5 rows x 6 columns]
Мощность assign возникает при использовании в цепочках операций. Например, мы можем ограничить DataFrame только теми, у которых длина чашелистика больше 5, вычислить соотношение и построить график
In [5]: iris = pd.read_csv('data/iris.data')
In [6]: (iris.query('SepalLength > 5')
...: .assign(SepalRatio=lambda x: x.SepalWidth / x.SepalLength,
...: PetalRatio=lambda x: x.PetalWidth / x.PetalLength)
...: .plot(kind='scatter', x='SepalRatio', y='PetalRatio'))
...:
Out[6]:
См. документация для получения дополнительной информации. (GH 9229)
Взаимодействие с scipy.sparse#
Добавлен SparseSeries.to_coo() и SparseSeries.from_coo() методы (GH 8048) для преобразования в и из scipy.sparse.coo_matrix экземпляры (см. здесь). Например, для SparseSeries с MultiIndex можно преобразовать в scipy.sparse.coo_matrix указав метки строк и столбцов как уровни индекса:
s = pd.Series([3.0, np.nan, 1.0, 3.0, np.nan, np.nan])
s.index = pd.MultiIndex.from_tuples([(1, 2, 'a', 0),
(1, 2, 'a', 1),
(1, 1, 'b', 0),
(1, 1, 'b', 1),
(2, 1, 'b', 0),
(2, 1, 'b', 1)],
names=['A', 'B', 'C', 'D'])
s
# SparseSeries
ss = s.to_sparse()
ss
A, rows, columns = ss.to_coo(row_levels=['A', 'B'],
column_levels=['C', 'D'],
sort_labels=False)
A
A.todense()
rows
columns
Метод from_coo — это удобный метод для создания SparseSeries
из scipy.sparse.coo_matrix:
from scipy import sparse
A = sparse.coo_matrix(([3.0, 1.0, 2.0], ([1, 0, 0], [0, 2, 3])),
shape=(3, 4))
A
A.todense()
ss = pd.SparseSeries.from_coo(A)
ss
Улучшения строковых методов#
Следующие новые методы доступны через
.strаксессор для применения функции к каждому значению. Это предназначено для большей согласованности со стандартными методами строк. (GH 9282, GH 9352, GH 9386, GH 9387, GH 9439)Методы
isalnum()isalpha()isdigit()isdigit()isspace()islower()isupper()istitle()isnumeric()isdecimal()find()rfind()ljust()rjust()zfill()In [7]: s = pd.Series(['abcd', '3456', 'EFGH']) In [8]: s.str.isalpha() Out[8]: 0 True 1 False 2 True Length: 3, dtype: bool In [9]: s.str.find('ab') Out[9]: 0 0 1 -1 2 -1 Length: 3, dtype: int64
Series.str.pad()иSeries.str.center()теперь принимаютfillcharопция для указания заполняющего символа (GH 9352)In [10]: s = pd.Series(['12', '300', '25']) In [11]: s.str.pad(5, fillchar='_') Out[11]: 0 ___12 1 __300 2 ___25 Length: 3, dtype: object
Добавлен
Series.str.slice_replace(), который ранее вызывалNotImplementedError(GH 8888)In [12]: s = pd.Series(['ABCD', 'EFGH', 'IJK']) In [13]: s.str.slice_replace(1, 3, 'X') Out[13]: 0 AXD 1 EXH 2 IX Length: 3, dtype: object # replaced with empty char In [14]: s.str.slice_replace(0, 1) Out[14]: 0 BCD 1 FGH 2 JK Length: 3, dtype: object
Другие улучшения#
Reindex теперь поддерживает
method='nearest'для фреймов или серий с монотонно возрастающим или убывающим индексом (GH 9258):In [15]: df = pd.DataFrame({'x': range(5)}) In [16]: df.reindex([0.2, 1.8, 3.5], method='nearest') Out[16]: x 0.2 0 1.8 2 3.5 4 [3 rows x 1 columns]
Этот метод также доступен на более низком уровне
Index.get_indexerиIndex.get_locметоды.The
read_excel()функции sheetname аргумент теперь принимает список иNone, чтобы получить несколько или все листы соответственно. Если указано более одного листа, возвращается словарь. (GH 9450)# Returns the 1st and 4th sheet, as a dictionary of DataFrames. pd.read_excel('path_to_file.xls', sheetname=['Sheet1', 3])
Позволить читать файлы Stata постепенно с помощью итератора; поддержка длинных строк в файлах Stata. См. документацию здесь (GH 9493:)
Пути, начинающиеся с ~, теперь будут раскрываться, начиная с домашнего каталога пользователя (GH 9066)
Добавлен выбор временного интервала в
get_data_yahoo(GH 9071)Добавлен
Timestamp.to_datetime64()в дополнение кTimedelta.to_timedelta64()(GH 9255)tseries.frequencies.to_offset()теперь принимаетTimedeltaв качестве входных данных (GH 9064)Параметр лага был добавлен к методу автокорреляции
Series, по умолчанию автокорреляция с лагом 1 (GH 9192)Timedeltaтеперь будет приниматьnanosecondsключевое слово в конструкторе (GH 9273)SQL код теперь безопасно экранирует имена таблиц и столбцов (GH 8986)
Добавлено автозаполнение для
Series.str.,Series.dt.иSeries.cat.(GH 9322)Index.get_indexerтеперь поддерживаетmethod='pad'иmethod='backfill'даже для любого целевого массива, не только монотонных целей. Эти методы также работают для монотонно убывающих, а также монотонно возрастающих индексов (GH 9258).Index.asofтеперь работает на всех типах индексов (GH 9258).A
verboseаргумент был расширен вio.read_excel(), по умолчанию False. Установите True для вывода названий листов по мере их парсинга. (GH 9450)Добавлен
days_in_month(псевдоним совместимостиdaysinmonth) свойство дляTimestamp,DatetimeIndex,Period,PeriodIndex, иSeries.dt(GH 9572)Добавлен
decimalопция вto_csvдля предоставления форматирования для десятичных разделителей, отличных от '.' (GH 781)Добавлен
normalizeопция дляTimestampнормализовано до полуночи (GH 8794)Добавлен пример для
DataFrameимпорт в R с использованием файла HDF5 иrhdf5библиотеки. См. документацию для получения дополнительной информации (GH 9636).
Обратно несовместимые изменения API#
Изменения в timedelta#
В v0.15.0 новый скалярный тип Timedelta была представлена, это подкласс datetime.timedelta. Упомянуто здесь было уведомлением об изменении API относительно .seconds аксессор. Цель состояла в предоставлении удобного набора аксессоров, которые дают 'естественное' значение для этой единицы, например, если у вас был Timedelta('1 day, 10:11:12'), затем .seconds вернуло бы 12. Однако это противоречит определению datetime.timedelta, который определяет .seconds как 10 * 3600 + 11 * 60 + 12 == 36672.
Итак, в версии v0.16.0 мы восстанавливаем API, чтобы он соответствовал datetime.timedelta. Кроме того, значения компонентов все еще доступны через .components аксессор. Это влияет на .seconds и .microseconds аксессорами и удаляет .hours, .minutes, .milliseconds аксессоры. Эти изменения затрагивают TimedeltaIndex и Series .dt аксессор также. (GH 9185, GH 9139)
Предыдущее поведение
In [2]: t = pd.Timedelta('1 day, 10:11:12.100123')
In [3]: t.days
Out[3]: 1
In [4]: t.seconds
Out[4]: 12
In [5]: t.microseconds
Out[5]: 123
Новое поведение
In [17]: t = pd.Timedelta('1 day, 10:11:12.100123')
In [18]: t.days
Out[18]: 1
In [19]: t.seconds
Out[19]: 36672
In [20]: t.microseconds
Out[20]: 100123
Используя .components позволяет полный доступ к компонентам
In [21]: t.components
Out[21]: Components(days=1, hours=10, minutes=11, seconds=12, milliseconds=100, microseconds=123, nanoseconds=0)
In [22]: t.components.seconds
Out[22]: 12
Изменения индексации#
Поведение небольшого подмножества крайних случаев при использовании .loc изменились (GH 8613). Кроме того, мы улучшили содержание выдаваемых сообщений об ошибках:
Срезы с
.locгде начальная и/или конечная граница не найдена в индексе, теперь разрешено; ранее это вызывалоKeyError. Это делает поведение таким же, как.ixв данном случае. Это изменение касается только срезов, а не индексации с одной меткой.In [23]: df = pd.DataFrame(np.random.randn(5, 4), ....: columns=list('ABCD'), ....: index=pd.date_range('20130101', periods=5)) ....: In [24]: df Out[24]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 [5 rows x 4 columns] In [25]: s = pd.Series(range(5), [-2, -1, 1, 2, 3]) In [26]: s Out[26]: -2 0 -1 1 1 2 2 3 3 4 Length: 5, dtype: int64
Предыдущее поведение
In [4]: df.loc['2013-01-02':'2013-01-10'] KeyError: 'stop bound [2013-01-10] is not in the [index]' In [6]: s.loc[-10:3] KeyError: 'start bound [-10] is not the [index]'
Новое поведение
In [27]: df.loc['2013-01-02':'2013-01-10'] Out[27]: A B C D 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 [4 rows x 4 columns] In [28]: s.loc[-10:3] Out[28]: -2 0 -1 1 1 2 2 3 3 4 Length: 5, dtype: int64
Разрешить срезы с float-подобными значениями на целочисленном индексе для
.ix. Ранее это было включено только для.loc:Предыдущее поведение
In [8]: s.ix[-1.0:2] TypeError: the slice start value [-1.0] is not a proper indexer for this index type (Int64Index)
Новое поведение
In [2]: s.ix[-1.0:2] Out[2]: -1 1 1 2 2 3 dtype: int64
Предоставить полезное исключение для индексации с недопустимым типом для этого индекса при использовании
.loc. Например, попытка использовать.locна индексе типаDatetimeIndexилиPeriodIndexилиTimedeltaIndex, с целым числом (или числом с плавающей запятой).Предыдущее поведение
In [4]: df.loc[2:3] KeyError: 'start bound [2] is not the [index]'
Новое поведение
In [4]: df.loc[2:3] TypeError: Cannot do slice indexing on
with keys
Изменения в Categorical#
В предыдущих версиях, Categoricals который имел неопределённый порядок (означает отсутствие ordered ключевое слово было передано) по умолчанию устанавливались как ordered Categoricals. В дальнейшем ordered ключевое слово в Categorical конструктор по умолчанию будет использовать False. Порядок теперь должен быть явным.
Кроме того, ранее вы мог изменить ordered атрибут Categorical можно установить напрямую, например cat.ordered=True; Это теперь устарело, и вам следует использовать cat.as_ordered() или cat.as_unordered(). По умолчанию они будут возвращать новый объект и не изменять существующий объект. (GH 9347, GH 9190)
Предыдущее поведение
In [3]: s = pd.Series([0, 1, 2], dtype='category')
In [4]: s
Out[4]:
0 0
1 1
2 2
dtype: category
Categories (3, int64): [0 < 1 < 2]
In [5]: s.cat.ordered
Out[5]: True
In [6]: s.cat.ordered = False
In [7]: s
Out[7]:
0 0
1 1
2 2
dtype: category
Categories (3, int64): [0, 1, 2]
Новое поведение
In [29]: s = pd.Series([0, 1, 2], dtype='category')
In [30]: s
Out[30]:
0 0
1 1
2 2
Length: 3, dtype: category
Categories (3, int64): [0, 1, 2]
In [31]: s.cat.ordered
Out[31]: False
In [32]: s = s.cat.as_ordered()
In [33]: s
Out[33]:
0 0
1 1
2 2
Length: 3, dtype: category
Categories (3, int64): [0 < 1 < 2]
In [34]: s.cat.ordered
Out[34]: True
# you can set in the constructor of the Categorical
In [35]: s = pd.Series(pd.Categorical([0, 1, 2], ordered=True))
In [36]: s
Out[36]:
0 0
1 1
2 2
Length: 3, dtype: category
Categories (3, int64): [0 < 1 < 2]
In [37]: s.cat.ordered
Out[37]: True
Для удобства создания серий категориальных данных мы добавили возможность передачи ключевых слов при вызове .astype(). Они передаются напрямую в конструктор.
In [54]: s = pd.Series(["a", "b", "c", "a"]).astype('category', ordered=True)
In [55]: s
Out[55]:
0 a
1 b
2 c
3 a
dtype: category
Categories (3, object): [a < b < c]
In [56]: s = (pd.Series(["a", "b", "c", "a"])
....: .astype('category', categories=list('abcdef'), ordered=False))
In [57]: s
Out[57]:
0 a
1 b
2 c
3 a
dtype: category
Categories (6, object): [a, b, c, d, e, f]
Другие изменения API#
Index.duplicatedтеперь возвращаетnp.array(dtype=bool)вместоIndex(dtype=object)содержащийboolзначения. (GH 8875)DataFrame.to_jsonтеперь возвращает точную сериализацию типа для каждого столбца для фреймов со смешанными типами данных (GH 9037)Ранее данные приводились к общему типу данных перед сериализацией, что, например, приводило к сериализации целых чисел в числа с плавающей точкой:
In [2]: pd.DataFrame({'i': [1,2], 'f': [3.0, 4.2]}).to_json() Out[2]: '{"f":{"0":3.0,"1":4.2},"i":{"0":1.0,"1":2.0}}'
Теперь каждый столбец сериализуется с использованием правильного типа данных:
In [2]: pd.DataFrame({'i': [1,2], 'f': [3.0, 4.2]}).to_json() Out[2]: '{"f":{"0":3.0,"1":4.2},"i":{"0":1,"1":2}}'
DatetimeIndex,PeriodIndexиTimedeltaIndex.summaryтеперь выводить в том же формате. (GH 9116)TimedeltaIndex.freqstrтеперь выводит тот же строковый формат, что иDatetimeIndex. (GH 9116)Столбчатые и горизонтальные столбчатые диаграммы больше не добавляют пунктирную линию вдоль информационной оси. Предыдущий стиль может быть достигнут с помощью
axhlineилиaxvlineметоды (GH 9088).Seriesаксессоры.dt,.catи.strтеперь вызываютAttributeErrorвместоTypeErrorесли серия не содержит данные соответствующего типа (GH 9617). Это более точно следует встроенной иерархии исключений Python и гарантирует, что тесты, такие какhasattr(s, 'cat')совместимы как в Python 2, так и в 3.Seriesтеперь поддерживает побитовые операции для целочисленных типов (GH 9016). Ранее даже если входные типы данных были целочисленными, выходной тип данных приводился кbool.Предыдущее поведение
In [2]: pd.Series([0, 1, 2, 3], list('abcd')) | pd.Series([4, 4, 4, 4], list('abcd')) Out[2]: a True b True c True d True dtype: bool
Новое поведение. Если входные dtypes являются целочисленными, выходной dtype также целочисленный, и выходные значения являются результатом побитовой операции.
In [2]: pd.Series([0, 1, 2, 3], list('abcd')) | pd.Series([4, 4, 4, 4], list('abcd')) Out[2]: a 4 b 5 c 6 d 7 dtype: int64
При делении с участием
SeriesилиDataFrame,0/0и0//0теперь даютnp.nanвместоnp.inf. (GH 9144, GH 8445)Предыдущее поведение
In [2]: p = pd.Series([0, 1]) In [3]: p / 0 Out[3]: 0 inf 1 inf dtype: float64 In [4]: p // 0 Out[4]: 0 inf 1 inf dtype: float64
Новое поведение
In [38]: p = pd.Series([0, 1]) In [39]: p / 0 Out[39]: 0 NaN 1 inf Length: 2, dtype: float64 In [40]: p // 0 Out[40]: 0 NaN 1 inf Length: 2, dtype: float64
Series.values_countsиSeries.describeдля категориальных данных теперь будет помещатьNaNзаписи в конце. (GH 9443)Series.describeдля категориальных данных теперь будут давать подсчеты и частоты 0, а неNaN, для неиспользуемых категорий (GH 9443)Из-за исправления ошибки, поиск частичной строковой метки с
DatetimeIndex.asofтеперь включает значения, соответствующие строке, даже если они находятся после начала частичной строковой метки (GH 9258).Старое поведение:
In [4]: pd.to_datetime(['2000-01-31', '2000-02-28']).asof('2000-02') Out[4]: Timestamp('2000-01-31 00:00:00')
Исправленное поведение:
In [41]: pd.to_datetime(['2000-01-31', '2000-02-28']).asof('2000-02') Out[41]: Timestamp('2000-02-28 00:00:00')
Чтобы воспроизвести старое поведение, просто добавьте больше точности к метке (например, используйте
2000-02-01вместо2000-02).
Устаревшие функции#
The
rplotинтерфейс построения графиков trellis устарел и будет удален в будущей версии. Мы рекомендуем внешние пакеты, такие как seaborn для аналогичной но более усовершенствованной функциональности (GH 3445). В документации приведены примеры преобразования существующего кода изrplotв seaborn здесь.The
pandas.sandbox.qtpandasинтерфейс устарел и будет удален в будущей версии. Мы рекомендуем пользователям обратиться к внешнему пакету pandas-qt. (GH 9615)The
pandas.rpyинтерфейс устарел и будет удалён в будущей версии. Аналогичную функциональность можно получить через rpy2 проект (GH 9602)Добавление
DatetimeIndex/PeriodIndexв другойDatetimeIndex/PeriodIndexустаревает как операция множества. Это будет изменено наTypeErrorв будущей версии..union()должен использоваться для операции объединения множеств. (GH 9094)Вычитание
DatetimeIndex/PeriodIndexиз другогоDatetimeIndex/PeriodIndexустаревает как операция над множествами. Это будет изменено на фактическое числовое вычитание, дающееTimeDeltaIndexв будущей версии..difference()должен использоваться для операции разностного множества. (GH 9094)
Удаление устаревших функций/изменений предыдущих версий#
DataFrame.pivot_tableиcrosstab’srowsиcolsименованные аргументы были удалены в пользуindexиcolumns(GH 6581)DataFrame.to_excelиDataFrame.to_csvcolsаргумент keyword был удален в пользуcolumns(GH 6581)Удалено
convert_dummiesв пользуget_dummies(GH 6581)Удалено
value_rangeв пользуdescribe(GH 6581)
Улучшения производительности#
Исправлена регрессия производительности для
.locиндексирование с массивом или списком (GH 9126:)DataFrame.to_json30-кратное улучшение производительности для фреймов со смешанными типами данных. (GH 9037)Улучшения производительности в
MultiIndex.duplicatedработая с метками вместо значений (GH 9125)это когда у вас есть коллекция
nuniqueпутем вызоваuniqueвместоvalue_counts(GH 9129, GH 7771)Улучшение производительности до 10 раз в
DataFrame.countиDataFrame.dropnaпутем соответствующего использования однородных/неоднородных типов данных (GH 9136)Улучшение производительности до 20 раз в
DataFrame.countпри использованииMultiIndexиlevelаргумент ключевого слова (GH 9163)Улучшения производительности и использования памяти в
mergeкогда пространство ключей превышаетint64bounds (GH 9151)Улучшения производительности при работе с несколькими ключами
groupby(GH 9429)Улучшения производительности в
MultiIndex.sortlevel(GH 9445)Улучшения производительности и использования памяти в
DataFrame.duplicated(GH 9398)Цитонизированный
Period(GH 9440)Уменьшено использование памяти на
to_hdf(GH 9648)
Исправления ошибок#
Изменено
.to_htmlдля удаления начальных/конечных пробелов в теле таблицы (GH 4987)Исправлена проблема с использованием
read_csvна s3 с Python 3 (GH 9452)Исправлена проблема совместимости в
DatetimeIndexзатрагивающие архитектуры, гдеnumpy.int_по умолчаниюnumpy.int32(GH 8943)Ошибка в индексировании Panel с объектоподобным (GH 9140)
Ошибка в возвращаемом
Series.dt.componentsиндекс был сброшен на индекс по умолчанию (GH 9247)Ошибка в
Categorical.__getitem__/__setitem__с вводом в виде списка, дающим некорректные результаты из-за приведения индексатора (GH 9469)Ошибка при частичной установке с DatetimeIndex (GH 9478)
Ошибка в groupby для целочисленных и datetime64 столбцов при применении агрегатора, которая приводила к изменению значения, когда число было достаточно большим (GH 9311, GH 6620)
Исправлена ошибка в
to_sqlпри отображенииTimestampстолбец объекта (datetime столбец с информацией о часовом поясе) в соответствующий тип sqlalchemy (GH 9085).Исправлена ошибка в
to_sqldtypeаргумент не принимает экземпляр типа SQLAlchemy (GH 9083).Ошибка в
.locчастичная установка сnp.datetime64(GH 9516)Некорректные типы данных выведены для дата-временных объектов
Series& на.xsсрезы (GH 9477)Элементы в
Categorical.unique()(иs.unique()ifsимеет тип данныхcategory) теперь отображаются в порядке, в котором они изначально найдены, а не в отсортированном порядке (GH 9331). Теперь это согласуется с поведением для других dtypes в pandas.Исправлена ошибка на платформах с обратным порядком байтов, которая приводила к некорректным результатам в
StataReader(GH 8688).Ошибка в
MultiIndex.has_duplicatesкогда большое количество уровней вызывает переполнение индексатора (GH 9075, GH 5873)Ошибка в
pivotиunstackгдеnanзначения нарушили бы выравнивание индекса (GH 4862, GH 7401, GH 7403, GH 7405, GH 7466, GH 9497)Ошибка в левом
joinдля MultiIndex сsort=Trueили нулевые значения (GH 9210).Ошибка в
MultiIndexгде добавление новых ключей завершилось бы неудачей (GH 9250).Ошибка в
groupbyкогда пространство ключей превышаетint64bounds (GH 9096).Ошибка в
unstackсTimedeltaIndexилиDatetimeIndexи нулевые значения (GH 9491).Ошибка в
rankгде сравнение чисел с плавающей точкой с допуском приведет к непоследовательному поведению (GH 8365).Исправлена ошибка кодировки символов в
read_stataиStataReaderпри загрузке данных из URL (GH 9231).Ошибка при добавлении
offsets.Nanoк другим смещениям вызываетTypeError(GH 9284)Ошибка в
DatetimeIndexитерация, связанная с (GH 8890), исправлено в (GH 9100)Ошибки в
resampleвокруг переходов на летнее время. Это потребовало исправления классов смещения, чтобы они правильно вели себя при переходах на летнее время. (GH 5172, GH 8744, GH 8653, GH 9173, GH 9468).Ошибка в методе бинарного оператора (например
.mul()) выравнивание с целочисленными уровнями (GH 9463).Ошибка в boxplot, scatter и hexbin plot может показывать ненужное предупреждение (GH 8877)
Ошибка в подграфике с
layoutkw может показывать ненужное предупреждение (GH 9464)Ошибка при использовании функций группировки, которым требуются передаваемые аргументы (например, axis), при использовании обёрнутой функции (например,
fillna), (GH 9221)DataFrameтеперь корректно поддерживает одновременноеcopyиdtypeаргументы в конструкторе (GH 9099)Ошибка в
read_csvпри использовании skiprows в файле с переводами строк CR в движке c. (GH 9079)isnullтеперь обнаруживаетNaTвPeriodIndex(GH 9129)Ошибка в groupby
.nth()с группировкой по нескольким столбцам (GH 8979)Ошибка в
DataFrame.whereиSeries.whereпринудительно преобразует числа в строки некорректно (GH 9280)Ошибка в
DataFrame.whereиSeries.whereraiseValueErrorкогда передаётся список строк. (GH 9280)Доступ к
Series.strметоды с нестроковыми значениями теперь вызываютTypeErrorвместо получения некорректных результатов (GH 9184)Ошибка в
DatetimeIndex.__contains__когда индекс имеет дубликаты и не является монотонно возрастающим (GH 9512)Исправлена ошибка деления на ноль для
Series.kurt()когда все значения равны (GH 9197)Исправлена проблема в
xlsxwriterдвижок, который добавлял формат 'General' по умолчанию к ячейкам, если не был применён другой формат. Это предотвращало применение другого форматирования строк или столбцов. (GH 9167)Исправлена проблема с
index_col=Falseкогдаusecolsтакже указан вread_csv. (GH 9082)Ошибка, где
wide_to_longизменит входной список заглушек (GH 9204)Ошибка в
to_sqlне хранит значения float64 с двойной точностью. (GH 9009)SparseSeriesиSparsePanelтеперь принимают конструкторы с нулевым аргументом (так же, как их неразреженные аналоги) (GH 9272).Регрессия при слиянии
Categoricalиobjectтипы данных (GH 9426)Ошибка в
read_csvс переполнением буфера при определенных поврежденных входных файлах (GH 9205)Ошибка в groupby MultiIndex с отсутствующей парой (GH 9049, GH 9344)
Исправлена ошибка в
Series.groupbyгде группировка поMultiIndexуровни игнорировали аргумент сортировки (GH 9444)Исправлена ошибка в
DataFrame.Groupbyгдеsort=Falseигнорируется в случае категориальных столбцов. (GH 8868)Исправлена ошибка при чтении CSV-файлов из Amazon S3 на Python 3, вызывающая TypeError (GH 9452)
Ошибка в ридере Google BigQuery, где ключ 'jobComplete' может присутствовать, но иметь значение False в результатах запроса (GH 8728)
Ошибка в
Series.values_countsс исключениемNaNдля категориального типаSeriesсdropna=True(GH 9443)Исправлена отсутствующая опция numeric_only для
DataFrame.std/var/sem(GH 9201)Поддержка конструирования
PanelилиPanel4Dсо скалярными данными (GH 8285)Seriesтекстовое представление отключено отmax_rows/max_columns(GH 7508).
Seriesформатирование чисел несовместимо при усечении (GH 8532).Предыдущее поведение
In [2]: pd.options.display.max_rows = 10 In [3]: s = pd.Series([1,1,1,1,1,1,1,1,1,1,0.9999,1,1]*10) In [4]: s Out[4]: 0 1 1 1 2 1 ... 127 0.9999 128 1.0000 129 1.0000 Length: 130, dtype: float64
Новое поведение
0 1.0000 1 1.0000 2 1.0000 3 1.0000 4 1.0000 ... 125 1.0000 126 1.0000 127 0.9999 128 1.0000 129 1.0000 dtype: float64
Ложный
SettingWithCopyПредупреждение генерировалось при установке нового элемента во фрейме в некоторых случаях (GH 8730)Следующее ранее сообщало о
SettingWithCopyПредупреждение.In [42]: df1 = pd.DataFrame({'x': pd.Series(['a', 'b', 'c']), ....: 'y': pd.Series(['d', 'e', 'f'])}) ....: In [43]: df2 = df1[['x']] In [44]: df2['y'] = ['g', 'h', 'i']
Участники#
Всего 60 человек внесли патчи в этот релиз. Люди с «+» рядом с именами внесли патч впервые.
Aaron Toth +
Alan Du +
Алессандро Амичи +
Artemy Kolchinsky
Ashwini Chaudhary +
Ben Schiller
Bill Letson
Брэндон Брэдли +
Chau Hoang +
Chris Reynolds
Chris Whelan +
Christer van der Meeren +
David Cottrell +
David Stephens
Ehsan Azarnasab +
Garrett-R +
Guillaume Gay
Jake Torcasso +
Jason Sexauer
Jeff Reback
John McNamara
Joris Van den Bossche
Joschka zur Jacobsmühlen +
Juarez Bochi +
Junya Hayashi +
K.-Michael Aye
Kerby Shedden +
Кевин Шеппард
Kieran O’Mahony
Kodi Arfer +
Matti Airas +
Min RK +
Mortada Mehyar
Роберт +
Скотт Э. Ласли
Scott Lasley +
Sergio Pascual +
Skipper Seabold
Stephan Hoyer
Томас Грейнджер
Tom Augspurger
TomAugspurger
Vladimir Filimonov +
Вьомкеш Трипати +
Will Holmgren
Yulong Yang +
behzad nouri
bertrandhaut +
bjonen
cel4 +
clham
hsperr +
ischwabacher
jnmclarty
josham +
jreback
omtinez +
roch +
sinhrks
unutbu