Версия 0.16.1 (11 мая 2015)#
Это минорный релиз с исправлениями ошибок от версии 0.16.0 и включает большое количество исправлений ошибок, а также несколько новых функций, улучшений и оптимизаций производительности. Мы рекомендуем всем пользователям обновиться до этой версии.
Основные моменты включают:
Поддержка
CategoricalIndex, категориальный индекс, см. здесьНовый раздел о том, как внести вклад в pandas, см. здесь
Пересмотренная документация «Слияние, объединение и конкатенация», включая графические примеры для упрощения понимания каждой операции, см. здесь
Новый метод
sampleдля получения случайных выборок из Series, DataFrames и Panels. См. здесьПо умолчанию
Indexпечать изменилась на более единообразный формат, см. здесьBusinessHourdatetime-offset теперь поддерживается, см. здесьДальнейшее улучшение
.strаксессор для упрощения строковых операций, см. здесь
Что нового в v0.16.1
Предупреждение
В pandas 0.17.0 подпакет pandas.io.data будет удален в пользу отдельно устанавливаемого пакета (GH 8961).
Улучшения#
CategoricalIndex#
Мы представляем CategoricalIndex, новый тип объекта индекса, полезный для поддержки
индексирования с дубликатами. Это контейнер вокруг Categorical (введено в v0.15.0)
и позволяет эффективное индексирование и хранение индекса с большим количеством дублирующихся элементов. До версии 0.16.1,
установка индекса DataFrame/Series с category dtype преобразует это в обычный объектный Index.
In [1]: df = pd.DataFrame({'A': np.arange(6),
...: 'B': pd.Series(list('aabbca'))
...: .astype('category', categories=list('cab'))
...: })
...:
In [2]: df
Out[2]:
A B
0 0 a
1 1 a
2 2 b
3 3 b
4 4 c
5 5 a
In [3]: df.dtypes
Out[3]:
A int64
B category
dtype: object
In [4]: df.B.cat.categories
Out[4]: Index(['c', 'a', 'b'], dtype='object')
установка индекса создаст CategoricalIndex
In [5]: df2 = df.set_index('B')
In [6]: df2.index
Out[6]: CategoricalIndex(['a', 'a', 'b', 'b', 'c', 'a'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')
индексирование с __getitem__/.iloc/.loc/.ix работает аналогично Index с дубликатами.
Индексаторы ДОЛЖНЫ быть в категории, иначе операция вызовет исключение.
In [7]: df2.loc['a']
Out[7]:
A
B
a 0
a 1
a 5
и сохраняет CategoricalIndex
In [8]: df2.loc['a'].index
Out[8]: CategoricalIndex(['a', 'a', 'a'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')
сортировка будет упорядочивать по порядку категорий
In [9]: df2.sort_index()
Out[9]:
A
B
c 4
a 0
a 1
a 5
b 2
b 3
операции groupby по индексу сохранят природу индекса, а также
In [10]: df2.groupby(level=0).sum()
Out[10]:
A
B
c 4
a 6
b 5
In [11]: df2.groupby(level=0).sum().index
Out[11]: CategoricalIndex(['c', 'a', 'b'], categories=['c', 'a', 'b'], ordered=False, name='B', dtype='category')
операции переиндексации вернут результирующий индекс на основе типа переданного
индексатора, что означает, что передача списка вернёт обычныйIndex; индексирование с помощью
а Categorical вернёт CategoricalIndex, индексированный в соответствии с категориями ПЕРЕДАННОГО Categorical dtype. Это позволяет произвольно индексировать их даже с
значениями НЕ из категорий, аналогично тому, как можно переиндексировать ЛЮБОЙ индекс pandas.
In [12]: df2.reindex(['a', 'e'])
Out[12]:
A
B
a 0.0
a 1.0
a 5.0
e NaN
In [13]: df2.reindex(['a', 'e']).index
Out[13]: pd.Index(['a', 'a', 'a', 'e'], dtype='object', name='B')
In [14]: df2.reindex(pd.Categorical(['a', 'e'], categories=list('abcde')))
Out[14]:
A
B
a 0.0
a 1.0
a 5.0
e NaN
In [15]: df2.reindex(pd.Categorical(['a', 'e'], categories=list('abcde'))).index
Out[15]: pd.CategoricalIndex(['a', 'a', 'a', 'e'],
categories=['a', 'b', 'c', 'd', 'e'],
ordered=False, name='B',
dtype='category')
См. документация для получения дополнительной информации. (GH 7629, GH 10038, GH 10039)
Пример#
Series, DataFrames и Panels теперь имеют новый метод: sample().
Метод принимает определённое количество строк или столбцов для возврата, или долю от общего количества строк или столбцов. Он также имеет опции для выборки с возвращением или без, для передачи столбца с весами для неравномерной выборки, и для установки значений seed для облегчения воспроизводимости. (GH 2419)
In [1]: example_series = pd.Series([0, 1, 2, 3, 4, 5])
# When no arguments are passed, returns 1
In [2]: example_series.sample()
Out[2]:
3 3
Length: 1, dtype: int64
# One may specify either a number of rows:
In [3]: example_series.sample(n=3)
Out[3]:
2 2
1 1
0 0
Length: 3, dtype: int64
# Or a fraction of the rows:
In [4]: example_series.sample(frac=0.5)
Out[4]:
1 1
5 5
3 3
Length: 3, dtype: int64
# weights are accepted.
In [5]: example_weights = [0, 0, 0.2, 0.2, 0.2, 0.4]
In [6]: example_series.sample(n=3, weights=example_weights)
Out[6]:
2 2
4 4
3 3
Length: 3, dtype: int64
# weights will also be normalized if they do not sum to one,
# and missing values will be treated as zeros.
In [7]: example_weights2 = [0.5, 0, 0, 0, None, np.nan]
In [8]: example_series.sample(n=1, weights=example_weights2)
Out[8]:
0 0
Length: 1, dtype: int64
При применении к DataFrame можно передать имя столбца для указания весов выборки при выборке строк.
In [9]: df = pd.DataFrame({"col1": [9, 8, 7, 6], "weight_column": [0.5, 0.4, 0.1, 0]})
In [10]: df.sample(n=3, weights="weight_column")
Out[10]:
col1 weight_column
0 9 0.5
1 8 0.4
2 7 0.1
[3 rows x 2 columns]
Улучшения строковых методов#
Продолжение с версии v0.16.0, следующие улучшения делают строковые операции проще и более согласованными со стандартными строковыми операциями Python.
Добавлен
StringMethods(.strаксессор) дляIndex(GH 9068)The
.strаксессор теперь доступен для обоихSeriesиIndex.In [11]: idx = pd.Index([" jack", "jill ", " jesse ", "frank"]) In [12]: idx.str.strip() Out[12]: Index(['jack', 'jill', 'jesse', 'frank'], dtype='object')
Один особый случай для
.strаксессор наIndexзаключается в том, что если строковый метод возвращаетbool,.strаксессор вернетnp.arrayвместо булевого значенияIndex(GH 8875). Это позволяет следующему выражению работать естественно:In [13]: idx = pd.Index(["a1", "a2", "b1", "b2"]) In [14]: s = pd.Series(range(4), index=idx) In [15]: s Out[15]: a1 0 a2 1 b1 2 b2 3 Length: 4, dtype: int64 In [16]: idx.str.startswith("a") Out[16]: array([ True, True, False, False]) In [17]: s[s.index.str.startswith("a")] Out[17]: a1 0 a2 1 Length: 2, dtype: int64
Следующие новые методы доступны через
.strаксессор для применения функции к каждому значению. (GH 9766, GH 9773, GH 10031, GH 10045, GH 10052)Методы
capitalize()swapcase()normalize()partition()rpartition()index()rindex()translate()splitтеперь принимаетexpandключевое слово для указания, следует ли расширять размерность.return_typeустарело. (GH 9847)In [18]: s = pd.Series(["a,b", "a,c", "b,c"]) # return Series In [19]: s.str.split(",") Out[19]: 0 [a, b] 1 [a, c] 2 [b, c] Length: 3, dtype: object # return DataFrame In [20]: s.str.split(",", expand=True) Out[20]: 0 1 0 a b 1 a c 2 b c [3 rows x 2 columns] In [21]: idx = pd.Index(["a,b", "a,c", "b,c"]) # return Index In [22]: idx.str.split(",") Out[22]: Index([['a', 'b'], ['a', 'c'], ['b', 'c']], dtype='object') # return MultiIndex In [23]: idx.str.split(",", expand=True) Out[23]: MultiIndex([('a', 'b'), ('a', 'c'), ('b', 'c')], )
Улучшено
extractиget_dummiesметоды дляIndex.str(GH 9980)
Другие улучшения#
BusinessHourсмещение теперь поддерживается, которое представляет рабочие часы с 09:00 до 17:00 вBusinessDayпо умолчанию. См. Здесь для подробностей. (GH 7905)In [24]: pd.Timestamp("2014-08-01 09:00") + pd.tseries.offsets.BusinessHour() Out[24]: Timestamp('2014-08-01 10:00:00') In [25]: pd.Timestamp("2014-08-01 07:00") + pd.tseries.offsets.BusinessHour() Out[25]: Timestamp('2014-08-01 10:00:00') In [26]: pd.Timestamp("2014-08-01 16:30") + pd.tseries.offsets.BusinessHour() Out[26]: Timestamp('2014-08-04 09:30:00')
DataFrame.diffтеперь принимаетaxisпараметр, определяющий направление дифференцирования (GH 9727)Разрешить
clip,clip_lower, иclip_upperдля принятия аргументов, подобных массиву, в качестве пороговых значений (Это регрессия с версии 0.11.0). Эти методы теперь имеютaxisпараметр, который определяет, как Series или DataFrame будет выровнен с пороговыми значениями. (GH 6966)DataFrame.mask()иSeries.mask()теперь поддерживает те же ключевые слова, что иwhere(GH 8801)dropфункция теперь может приниматьerrorsключевое слово для подавленияValueErrorвызывается, когда какая-либо метка не существует в целевых данных. (GH 6736)In [27]: df = pd.DataFrame(np.random.randn(3, 3), columns=["A", "B", "C"]) In [28]: df.drop(["A", "X"], axis=1, errors="ignore") Out[28]: B C 0 -0.706771 -1.039575 1 -0.424972 0.567020 2 -1.087401 -0.673690 [3 rows x 2 columns]
Добавить поддержку разделения лет и кварталов с помощью тире, например 2014-Q1. (GH 9688)
Разрешить преобразование значений с типом данных
datetime64илиtimedelta64в строки с использованиемastype(str)(GH 9757)get_dummiesфункция теперь принимаетsparseключевое слово. Если установлено вTrue, возвращаемыйDataFrameявляется разреженным, напримерSparseDataFrame. (GH 8823)Periodтеперь принимаетdatetime64как входное значение. (GH 9054)Разрешить преобразование строки timedelta, когда ведущий ноль отсутствует в определении времени, т.е.
0:00:00против00:00:00. (GH 9570)Разрешить
Panel.shiftсaxis='items'(GH 9890)Попытка записи файла Excel теперь вызывает исключение
NotImplementedErrorеслиDataFrameимеетMultiIndexвместо записи поврежденного файла Excel. (GH 9794)Разрешить
Categorical.add_categoriesприниматьSeriesилиnp.array. (GH 9927)Добавить/удалить
str/dt/catдоступники динамически из__dir__. (GH 9910)Добавить
normalizeв качествеdtметод доступа. (GH 10047)DataFrameиSeriesтеперь имеют_constructor_expanddimсвойство как переопределяемый конструктор для данных на одну размерность выше. Это следует использовать только тогда, когда это действительно необходимо, см. здесьpd.lib.infer_dtypeтеперь возвращает'bytes'в Python 3, где это уместно. (GH 10032)
Изменения API#
При передаче ax в
df.plot( ..., ax=ax),sharexkwarg теперь по умолчанию будетFalse. В результате видимость xlabels и xticklabels больше не будет изменяться. Вы должны сделать это самостоятельно для правых осей на вашем графике или установитьsharex=Trueявно (но это изменяет видимость для всех осей на рисунке, а не только для той, которая передана!). Если pandas создаёт подграфики самостоятельно (например, не переданоaxkwarg), тогда по умолчанию все равноsharex=Trueи изменения видимости применяются.assign()теперь вставляет новые столбцы в алфавитном порядке. Ранее порядок был произвольным. (GH 9777)По умолчанию,
read_csvиread_tableтеперь будет пытаться определить тип сжатия на основе расширения файла. Установитеcompression=Noneчтобы восстановить предыдущее поведение (без декомпрессии). (GH 9770)
Устаревшие функции#
Series.str.split’sreturn_typeключевое слово было удалено в пользуexpand(GH 9847)
Представление индекса#
Строковое представление Index и его подклассы теперь унифицированы. Они будут отображаться в одну строку, если значений мало; в многострочном формате с переносами для большого количества значений (но менее чем display.max_seq_items; если много элементов (> display.max_seq_items) покажет усеченное отображение (начало и конец данных). Форматирование для MultiIndex остается неизменным (многострочное отображение с переносом). Ширина отображения реагирует на опцию display.max_seq_items, который по умолчанию равен 100. (GH 6482)
Предыдущее поведение
In [2]: pd.Index(range(4), name='foo')
Out[2]: Int64Index([0, 1, 2, 3], dtype='int64')
In [3]: pd.Index(range(104), name='foo')
Out[3]: Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...], dtype='int64')
In [4]: pd.date_range('20130101', periods=4, name='foo', tz='US/Eastern')
Out[4]:
[2013-01-01 00:00:00-05:00, ..., 2013-01-04 00:00:00-05:00]
Length: 4, Freq: D, Timezone: US/Eastern
In [5]: pd.date_range('20130101', periods=104, name='foo', tz='US/Eastern')
Out[5]:
[2013-01-01 00:00:00-05:00, ..., 2013-04-14 00:00:00-04:00]
Length: 104, Freq: D, Timezone: US/Eastern
Новое поведение
In [29]: pd.set_option("display.width", 80)
In [30]: pd.Index(range(4), name="foo")
Out[30]: RangeIndex(start=0, stop=4, step=1, name='foo')
In [31]: pd.Index(range(30), name="foo")
Out[31]: RangeIndex(start=0, stop=30, step=1, name='foo')
In [32]: pd.Index(range(104), name="foo")
Out[32]: RangeIndex(start=0, stop=104, step=1, name='foo')
In [33]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"], ordered=True, name="foobar")
Out[33]: CategoricalIndex(['a', 'bb', 'ccc', 'dddd'], categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar')
In [34]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"] * 10, ordered=True, name="foobar")
Out[34]:
CategoricalIndex(['a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a',
'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb',
'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc',
'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd',
'a', 'bb', 'ccc', 'dddd'],
categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar')
In [35]: pd.CategoricalIndex(["a", "bb", "ccc", "dddd"] * 100, ordered=True, name="foobar")
Out[35]:
CategoricalIndex(['a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a',
'bb',
...
'ccc', 'dddd', 'a', 'bb', 'ccc', 'dddd', 'a', 'bb', 'ccc',
'dddd'],
categories=['a', 'bb', 'ccc', 'dddd'], ordered=True, dtype='category', name='foobar', length=400)
In [36]: pd.date_range("20130101", periods=4, name="foo", tz="US/Eastern")
Out[36]:
DatetimeIndex(['2013-01-01 00:00:00-05:00', '2013-01-02 00:00:00-05:00',
'2013-01-03 00:00:00-05:00', '2013-01-04 00:00:00-05:00'],
dtype='datetime64[ns, US/Eastern]', name='foo', freq='D')
In [37]: pd.date_range("20130101", periods=25, freq="D")
Out[37]:
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06', '2013-01-07', '2013-01-08',
'2013-01-09', '2013-01-10', '2013-01-11', '2013-01-12',
'2013-01-13', '2013-01-14', '2013-01-15', '2013-01-16',
'2013-01-17', '2013-01-18', '2013-01-19', '2013-01-20',
'2013-01-21', '2013-01-22', '2013-01-23', '2013-01-24',
'2013-01-25'],
dtype='datetime64[ns]', freq='D')
In [38]: pd.date_range("20130101", periods=104, name="foo", tz="US/Eastern")
Out[38]:
DatetimeIndex(['2013-01-01 00:00:00-05:00', '2013-01-02 00:00:00-05:00',
'2013-01-03 00:00:00-05:00', '2013-01-04 00:00:00-05:00',
'2013-01-05 00:00:00-05:00', '2013-01-06 00:00:00-05:00',
'2013-01-07 00:00:00-05:00', '2013-01-08 00:00:00-05:00',
'2013-01-09 00:00:00-05:00', '2013-01-10 00:00:00-05:00',
...
'2013-04-05 00:00:00-04:00', '2013-04-06 00:00:00-04:00',
'2013-04-07 00:00:00-04:00', '2013-04-08 00:00:00-04:00',
'2013-04-09 00:00:00-04:00', '2013-04-10 00:00:00-04:00',
'2013-04-11 00:00:00-04:00', '2013-04-12 00:00:00-04:00',
'2013-04-13 00:00:00-04:00', '2013-04-14 00:00:00-04:00'],
dtype='datetime64[ns, US/Eastern]', name='foo', length=104, freq='D')
Улучшения производительности#
Исправления ошибок#
Ошибка, при которой метки неправильно отображались в легенде
DataFrame.plot(), передаваяlabel=аргументы работают, и индексы Series больше не изменяются. (GH 9542)Ошибка в сериализации JSON, вызывающая segfault при нулевой длине фрейма. (GH 9805)
Ошибка в
read_csvгде отсутствие завершающих разделителей может вызвать ошибку сегментации (GH 5664)Ошибка сохранения имени индекса при добавлении (GH 9862)
Ошибка в
scatter_matrixрисует неожиданные метки делений оси (GH 5662)Исправлена ошибка в
StataWriterприводя к изменениям во входных данныхDataFrameпри сохранении (GH 9795).Ошибка в
transformвызывая несоответствие длины, когда присутствовали нулевые записи и использовался быстрый агрегатор (GH 9697)Ошибка в
equalsвызывая ложные отрицания при изменении порядка блоков (GH 9330)Ошибка при группировке с несколькими
pd.Grouperгде один не основан на времени (GH 10063)Ошибка в
read_sql_tableошибка при чтении таблицы PostgreSQL с часовым поясом (GH 7139)Ошибка в
DataFrameнарезка может не сохранять метаданные (GH 9776)Ошибка, где
TimdeltaIndexне были правильно сериализованы в фиксированномHDFStore(GH 9635)Ошибка с
TimedeltaIndexконструктор игнорируетnameпри задании другогоTimedeltaIndexв качестве данных (GH 10025).Ошибка в
DataFrameFormatter._get_formatted_indexбез примененияmax_colwidthвDataFrameиндекс (GH 7856)Ошибка в
.locс источником данных read-only ndarray (GH 10043)Ошибка в
groupby.apply()которая вызывала бы ошибку, если переданная пользовательская функция возвращала толькоNone(для всех входных данных). (GH 9685)Всегда используйте временные файлы в тестах pytables (GH 9992)
Ошибка при непрерывном построении графиков с использованием
secondary_yможет неправильно отображать легенду. (GH 9610, GH 9779)Ошибка в
DataFrame.plot(kind="hist")приводит кTypeErrorкогдаDataFrameсодержит нечисловые столбцы (GH 9853)Ошибка, при которой повторное построение графика
DataFrameсDatetimeIndexможет вызыватьTypeError(GH 9852)Ошибка в
setup.pyчто позволяло собрать несовместимую версию Cython (GH 9827)Ошибка в построении графиков
secondary_yнеправильно присоединяетright_axсвойство для вторичных осей, рекурсивно определяющее само себя. (GH 9861)Ошибка в
Series.quantileна пустой Series типаDatetimeилиTimedelta(GH 9675)Ошибка в
whereвызывая некорректные результаты, когда требовалось повышение типа (GH 9731)Ошибка в
FloatArrayFormatterгде граница принятия решения для отображения «маленьких» чисел с плавающей точкой в десятичном формате смещена на один порядок величины для заданной display.precision (GH 9764)Исправлена ошибка, где
DataFrame.plot()вызвал ошибку, когда обаcolorиstyleключевые слова были переданы, и в строке стиля не было символа цвета (GH 9671)Не отображается
DeprecationWarningпри комбинировании списков сIndex(GH 10083)Ошибка в
read_csvиread_tableпри использованииskip_rowsпараметр, если присутствуют пустые строки. (GH 9832)Ошибка в
read_csv()интерпретируетindex_col=Trueкак1(GH 9798)Ошибка в сравнениях равенства индексов с использованием
==ошибка при несовместимости типов Index/MultiIndex (GH 9785)Ошибка, при которой
SparseDataFrameне мог принятьnanв качестве имени столбца (GH 8822)Ошибка в
to_msgpackиread_msgpackподдержка сжатия zlib и blosc (GH 9783)Ошибка
GroupBy.sizeне присваивает имя индексу корректно при группировке поTimeGrouper(GH 9925)Ошибка, вызывающая исключение при присваивании срезов, потому что
length_of_indexerвозвращает неверные результаты (GH 9995)Ошибка в парсере csv, приводящая к пропуску строк с начальным пробелом и одним непробельным символом. (GH 9710)
Ошибка в парсере CSV на C, вызывающая ложные NaN, когда данные начинались с новой строки, за которой следовал пробел. (GH 10022)
Ошибка, из-за которой элементы с нулевой группой попадают в конечную группу при группировке по
Categorical(GH 9603)Ошибка, при которой поведение .iloc и .loc не согласовано на пустых датафреймах (GH 9964)
Ошибка в недопустимом доступе к атрибуту на
TimedeltaIndexнеправильно вызывалосьValueErrorвместоAttributeError(GH 9680)Ошибка в неравных сравнениях между категориальными данными и скаляром, который не входит в категории (например,
Series(Categorical(list("abc"), ordered=True)) > "d". Это возвращалосьFalseдля всех элементов, но теперь вызываетTypeError. Сравнения на равенство теперь также возвращаютFalseдля==иTrueдля!=. (GH 9848)Ошибка в DataFrame
__setitem__когда правая сторона является словарем (GH 9874)Ошибка в
whereкогда dtype равенdatetime64/timedelta64, но тип данных другого не является (GH 9804)Ошибка в
MultiIndex.sortlevel()приводит к разрывам имен уровней в юникоде (GH 9856)Ошибка, при которой
groupby.transformнеправильно принудительно приводил выходные типы данных к соответствию входным типам данных. (GH 9807)Ошибка в
DataFrameконструктор, когдаcolumnsпараметр установлен, иdataявляется пустым списком (GH 9939)Ошибка в столбчатой диаграмме с
log=TrueвызываетTypeErrorесли все значения меньше 1 (GH 9905)Ошибка в горизонтальной гистограмме игнорирует
log=True(GH 9905)Ошибка в запросах PyTables, которые не возвращали корректные результаты при использовании индекса (GH 8265, GH 9676)
Ошибка при делении DataFrame, содержащего значения типа
DecimalдругимDecimalвызовет ошибку. (GH 9787)Ошибка, при использовании DataFrames asfreq удалялось имя индекса. (GH 9885)
Ошибка, вызывающая лишнюю точку индекса при ресемплинге BM/BQ (GH 9756)
Изменено кэширование в
AbstractHolidayCalendarдолжен быть на уровне экземпляра, а не на уровне класса, так как последнее может привести к неожиданному поведению. (GH 9552)Исправлен вывод LaTeX для фреймов данных с MultiIndex (GH 9778)
Ошибка, вызывающая исключение при установке пустого диапазона с помощью
DataFrame.loc(GH 9596)Ошибка в скрытии меток делений с подграфиками и общими осями при добавлении нового графика к существующей сетке осей (GH 9158)
Ошибка в
transformиfilterпри группировке по категориальной переменной (GH 9921)Ошибка в
transformкогда группы равны по количеству и типу данных входному индексу (GH 9700)Коннектор Google BigQuery теперь импортирует зависимости на основе каждого метода.(GH 9713)
Обновлённый коннектор BigQuery больше не использует устаревший
oauth2client.tools.run()(GH 8327)Ошибка в унаследованном
DataFrame. Он может не возвращать правильный класс при срезе или подмножестве. (GH 9632)Ошибка в
.median()где нечисловые нулевые значения обрабатываются некорректно (GH 10040)Ошибка в Series.fillna(), где возникает исключение, если задана численно преобразуемая строка (GH 10092)
Участники#
Всего 58 человек внесли патчи в этот релиз. Люди со знаком «+» рядом с именами внесли патч впервые.
Alfonso MHC +
Andy Hayden
Artemy Kolchinsky
Chris Gilmer +
Chris Grinolds +
Dan Birken
David BROCHART +
David Hirschfeld +
David Stephens
Dr. Leo +
Evan Wright +
Frans van Dunné +
Hatem Nassrat +
Henning Sperr +
Hugo Herter +
Ян Шульц
Jeff Blackburne +
Jeff Reback
Jim Crist +
Jonas Abernot +
Joris Van den Bossche
Керби Шедден
Leo Razoumov +
Manuel Riel +
Mortada Mehyar
Nick Burns +
Nick Eubank +
Оливье Гризель
Филлип Клауд
Пьетро Баттистон
Roy Hyunjin Han
Sam Zhang +
Scott Sanderson +
Sinhrks +
Stephan Hoyer
Tiago Antao
Tom Ajamian +
Tom Augspurger
Tomaz Berisa +
Vikram Shirgur +
Владимир Филимонов
William Hogman +
Yasin A +
Younggun Kim +
behzad nouri
dsm054
floydsoft +
flying-sheep +
gfr +
jnmclarty
jreback
ksanghai +
lucas +
mschmohl +
ptype +
rockg
scls19fr +
sinhrks