Версия 0.15.1 (9 ноября 2014)#
Это минорный релиз с исправлениями ошибок от версии 0.15.0 и включает небольшое количество изменений API, несколько новых функций, улучшений и оптимизаций производительности вместе с большим количеством исправлений ошибок. Мы рекомендуем всем пользователям обновиться до этой версии.
Изменения API#
s.dt.hourи другие.dtаксессоры теперь будут возвращатьnp.nanдля пропущенных значений (вместо предыдущего -1), (GH 8689)In [1]: s = pd.Series(pd.date_range("20130101", periods=5, freq="D")) In [2]: s.iloc[2] = np.nan In [3]: s Out[3]: 0 2013-01-01 1 2013-01-02 2 NaT 3 2013-01-04 4 2013-01-05 Length: 5, dtype: datetime64[ns]
предыдущее поведение:
In [6]: s.dt.hour Out[6]: 0 0 1 0 2 -1 3 0 4 0 dtype: int64
текущее поведение:
In [4]: s.dt.hour Out[4]: 0 0.0 1 0.0 2 NaN 3 0.0 4 0.0 Length: 5, dtype: float64
groupbyсas_index=Falseне добавит ошибочные дополнительные столбцы в результат (GH 8582):In [5]: np.random.seed(2718281) In [6]: df = pd.DataFrame(np.random.randint(0, 100, (10, 2)), columns=["jim", "joe"]) In [7]: df.head() Out[7]: jim joe 0 61 81 1 96 49 2 55 65 3 72 51 4 77 12 [5 rows x 2 columns] In [8]: ts = pd.Series(5 * np.random.randint(0, 3, 10))
предыдущее поведение:
In [4]: df.groupby(ts, as_index=False).max() Out[4]: NaN jim joe 0 0 72 83 1 5 77 84 2 10 96 65
текущее поведение:
In [4]: df.groupby(ts, as_index=False).max() Out[4]: jim joe 0 72 83 1 77 84 2 96 65
groupbyне будет ошибочно исключать столбцы, если имя столбца конфликтует с именем группировщика (GH 8112):In [9]: df = pd.DataFrame({"jim": range(5), "joe": range(5, 10)}) In [10]: df Out[10]: jim joe 0 0 5 1 1 6 2 2 7 3 3 8 4 4 9 [5 rows x 2 columns] In [11]: gr = df.groupby(df["jim"] < 2)
предыдущее поведение (исключает 1-й столбец из вывода):
In [4]: gr.apply(sum) Out[4]: joe jim False 24 True 11
текущее поведение:
In [12]: gr.apply(sum) Out[12]: jim joe jim False 9 24 True 1 11 [2 rows x 2 columns]
Поддержка срезов с монотонно убывающими индексами, даже если
startилиstopне найден в индексе (GH 7860):In [13]: s = pd.Series(["a", "b", "c", "d"], [4, 3, 2, 1]) In [14]: s Out[14]: 4 a 3 b 2 c 1 d Length: 4, dtype: object
предыдущее поведение:
In [8]: s.loc[3.5:1.5] KeyError: 3.5
текущее поведение:
In [15]: s.loc[3.5:1.5] Out[15]: 3 b 2 c Length: 2, dtype: object
io.data.Optionsисправлено для изменения формата страницы Yahoo Options (GH 8612), (GH 8741)Примечание
В результате изменения макета страницы опционов Yahoo, когда указана дата экспирации,
Optionsметоды теперь возвращают данные для одной даты экспирации. Ранее методы возвращали все данные для выбранного месяца.The
monthиyearпараметры были восстановлены из устаревших и могут использоваться для получения всех данных опционов за заданный месяц.Если указана недействительная дата истечения срока, возвращаются данные для следующего истечения после указанной даты.
Опциональные датафреймы теперь сохраняются в экземпляре как
callsYYMMDDилиputsYYMMDD. Ранее они сохранялись какcallsMMYYиputsMMYY. Следующий срок действия сохраняется какcallsиputs.Новые возможности:
Параметр expiry теперь может быть одной датой или объектом, подобным списку, содержащим даты.
Новое свойство
expiry_datesбыл добавлен, который возвращает все доступные даты истечения.
Текущее поведение:
In [17]: from pandas.io.data import Options In [18]: aapl = Options('aapl', 'yahoo') In [19]: aapl.get_call_data().iloc[0:5, 0:1] Out[19]: Last Strike Expiry Type Symbol 80 2014-11-14 call AAPL141114C00080000 29.05 84 2014-11-14 call AAPL141114C00084000 24.80 85 2014-11-14 call AAPL141114C00085000 24.05 86 2014-11-14 call AAPL141114C00086000 22.76 87 2014-11-14 call AAPL141114C00087000 21.74 In [20]: aapl.expiry_dates Out[20]: [datetime.date(2014, 11, 14), datetime.date(2014, 11, 22), datetime.date(2014, 11, 28), datetime.date(2014, 12, 5), datetime.date(2014, 12, 12), datetime.date(2014, 12, 20), datetime.date(2015, 1, 17), datetime.date(2015, 2, 20), datetime.date(2015, 4, 17), datetime.date(2015, 7, 17), datetime.date(2016, 1, 15), datetime.date(2017, 1, 20)] In [21]: aapl.get_near_stock_price(expiry=aapl.expiry_dates[0:3]).iloc[0:5, 0:1] Out[21]: Last Strike Expiry Type Symbol 109 2014-11-22 call AAPL141122C00109000 1.48 2014-11-28 call AAPL141128C00109000 1.79 110 2014-11-14 call AAPL141114C00110000 0.55 2014-11-22 call AAPL141122C00110000 1.02 2014-11-28 call AAPL141128C00110000 1.32
pandas теперь также регистрирует
datetime64тип данных в реестре единиц matplotlib для построения таких значений как даты и время. Это активируется после импорта pandas. В предыдущих версиях построение массиваdatetime64значения привели бы к построенным целочисленным значениям. Чтобы сохранить предыдущее поведение, вы можете сделатьdel matplotlib.units.registry[np.datetime64](GH 8614).
Улучшения#
concatразрешает более широкий спектр итерируемых объектов pandas передаваться в качестве первого параметра (GH 8645):In [16]: from collections import deque In [17]: df1 = pd.DataFrame([1, 2, 3]) In [18]: df2 = pd.DataFrame([4, 5, 6])
предыдущее поведение:
In [7]: pd.concat(deque((df1, df2))) TypeError: first argument must be a list-like of pandas objects, you passed an object of type "deque"
текущее поведение:
In [19]: pd.concat(deque((df1, df2))) Out[19]: 0 0 1 1 2 2 3 0 4 1 5 2 6 [6 rows x 1 columns]
Представлять
MultiIndexметки с типом данных, который использует память на основе размера уровня. В предыдущих версиях использование памяти было постоянным — 8 байт на элемент в каждом уровне. Кроме того, в предыдущих версиях сообщено использование памяти было некорректным, так как не показывало использование памяти, занимаемой базовым массивом данных. (GH 8456)In [20]: dfi = pd.DataFrame( ....: 1, index=pd.MultiIndex.from_product([["a"], range(1000)]), columns=["A"] ....: ) ....:
предыдущее поведение:
# this was underreported in prior versions In [1]: dfi.memory_usage(index=True) Out[1]: Index 8000 # took about 24008 bytes in < 0.15.1 A 8000 dtype: int64
текущее поведение:
In [21]: dfi.memory_usage(index=True) Out[21]: Index 44212 A 8000 Length: 2, dtype: int64
Добавлены свойства индекса
is_monotonic_increasingиis_monotonic_decreasing(GH 8680).Добавлена возможность выбора столбцов при импорте файлов Stata (GH 7935)
Квалификация использования памяти в
DataFrame.info()путем добавления+если это нижняя граница (GH 8578)Вызывать ошибки в определенных случаях агрегации, где аргумент, такой как
numeric_onlyне обрабатывается (GH 8592).Добавлена поддержка 3-символьных ISO и нестандартных кодов стран в
io.wb.download()(GH 8482)Запросы данных Всемирного банка теперь будут предупреждать/вызывать исключение на основе
errorsаргумент, а также список жёстко заданных кодов стран и JSON-ответ Всемирного банка. В предыдущих версиях сообщения об ошибках не смотрели на JSON-ответ Всемирного банка. Проблемные входные данные просто отбрасывались перед запросом. Проблема заключалась в том, что многие хорошие страны были обрезаны в жёстко заданном подходе. Все страны будут работать сейчас, но некоторые плохие страны вызовут исключения, потому что некоторые крайние случаи ломают весь ответ. (GH 8482)Добавлена опция для
Series.str.split()для возвратаDataFrameа неSeries(GH 8428)Добавлена опция для
df.info(null_counts=None|True|False)чтобы переопределить параметры отображения по умолчанию и принудительно показывать количество null-значений (GH 8701)
Исправления ошибок#
Ошибка при распаковке
CustomBusinessDayобъект (GH 8591)Ошибка в приведении
Categoricalв массив записей, напримерdf.to_records()(GH 8626)Ошибка в
Categoricalне создан правильно сSeries.to_frame()(GH 8626)Ошибка при приведении типов в astype для
Categoricalпереданногоpd.Categorical(теперь вызываетTypeErrorправильно), (GH 8626)Ошибка в
cut/qcutпри использованииSeriesиretbins=True(GH 8589)Ошибка при записи категориальных столбцов в базу данных SQL с
to_sql(GH 8624).Ошибка при сравнении
Categoricalдаты и времени вызывает ошибку при сравнении со скалярной датой и временем (GH 8687)Ошибка при выборе из
Categoricalс.iloc(GH 8623)Ошибка в groupby-transform с Categorical (GH 8623)
Ошибка в duplicated/drop_duplicates с Categorical (GH 8623)
Ошибка в
Categoricalотраженный оператор сравнения вызывал ошибку, если первый аргумент был скаляром массива numpy (например, np.int64) (GH 8658)Ошибка в индексации Panel с помощью списка (GH 8710)
Проблема совместимости
DataFrame.dtypesкогдаoptions.mode.use_inf_as_nullравно True (GH 8722)Ошибка в
read_csv,dialectпараметр не принимал строку (GH 8703)Ошибка при срезе уровня MultiIndex пустым списком (GH 8737)
Ошибка в числовых операциях индекса add/sub с Float/Index Index с массивами numpy (GH 8608)
Ошибка в setitem с пустым индексатором и нежелательным приведением типов (GH 8669)
Ошибка в ix/loc при разделении блоков на setitem (проявляется с целочисленными типами данных, например datetime64) (GH 8607)
Ошибка при индексировании по меткам с целыми числами, не найденными в индексе для неуникальных, но монотонных индексов (GH 8680).
Ошибка при индексации Float64Index с
np.nanна numpy 1.7 (GH 8980).Исправление
shapeатрибут дляMultiIndex(GH 8609)Ошибка в
GroupByгде конфликт имен между группировщиком и столбцами может нарушитьgroupbyоперации (GH 7115, GH 8112)Исправлена ошибка, при которой построение графика столбца
yи указание метки изменит имя индекса исходного DataFrame (GH 8494)Исправлена регрессия при построении графика DatetimeIndex напрямую с matplotlib (GH 8614).
Ошибка в
date_rangeгде частично указанные даты включали бы текущую дату (GH 6961)Ошибка при установке через индексатор скалярного значения со смешанным типом данных
Panel4dне удавалось (GH 8702)Ошибка, где
DataReaderне удавалось, если один из переданных символов был недействительным. Теперь возвращает данные для действительных символов и np.nan для недействительных (GH 8494)Ошибка в
get_quote_yahooкоторый не позволял бы возвращать не-вещественные значения (GH 5229).
Участники#
Всего 23 человека внесли патчи в этот релиз. Люди со знаком «+» рядом с именами внесли патч впервые.
Aaron Staple +
Andrew Rosenfeld
Anton I. Sipos
Artemy Kolchinsky
Билл Летсон +
Dave Hughes +
David Stephens
Гийом Орель +
Jeff Reback
Joris Van den Bossche
Кевин Шеппард
Nick Stahl +
Sanghee Kim +
Stephan Hoyer
Tom Augspurger
TomAugspurger
WANG Aiyong +
behzad nouri
immerrr
jnmclarty
jreback
pallav-fdsi +
unutbu