Версия 0.7.3 (12 апреля 2012)#
Это минорный релиз от 0.7.2, который исправляет множество мелких ошибок и добавляет ряд хороших новых функций. Также есть пара изменений API, на которые стоит обратить внимание; они не должны затронуть многих пользователей, и мы склонны называть их «исправлениями ошибок», даже если они представляют собой изменение в поведении. См. полные заметки о выпуске или в трекере проблем на GitHub для полного списка.
Новые возможности#
Новый считыватель файлов фиксированной ширины,
read_fwfНовый scatter_matrix функция для создания матрицы диаграммы рассеяния
from pandas.tools.plotting import scatter_matrix
scatter_matrix(df, alpha=0.2) # noqa F821
Добавить
stackedаргумент для Series и DataFrameplotметод для столбчатые диаграммы с накоплением.
df.plot(kind="bar", stacked=True) # noqa F821
df.plot(kind="barh", stacked=True) # noqa F821
Добавить логарифм x и y параметры масштабирования to
DataFrame.plotиSeries.plotДобавить
kurtметоды для Series и DataFrame для вычисления эксцесса
Изменение API для сравнения NA boolean#
Отменены некоторые изменения в обработке значений NA (обычно представленных как NaN или
None) обрабатываются в нечисловых Series:
In [1]: series = pd.Series(["Steve", np.nan, "Joe"])
In [2]: series == "Steve"
Out[2]:
0 True
1 False
2 False
Length: 3, dtype: bool
In [3]: series != "Steve"
Out[3]:
0 False
1 True
2 True
Length: 3, dtype: bool
В сравнениях NA / NaN всегда будут проходить как False за исключением
!= который является True. Будьте очень осторожны с булевой арифметикой, особенно с отрицанием, при наличии данных NA. Возможно, вы захотите добавить явный фильтр NA в операции с булевыми массивами, если вас это беспокоит:
In [4]: mask = series == "Steve"
In [5]: series[mask & series.notnull()]
Out[5]:
0 Steve
Length: 1, dtype: object
Хотя распространение NA в сравнениях может показаться правильным поведением некоторым пользователям (и можно утверждать на чисто технических основаниях, что это правильный подход), было принято решение, что распространение NA повсюду, включая числовые массивы, вызовет множество проблем для пользователей. Таким образом, был принят подход «практичность важнее чистоты». Этот вопрос может быть пересмотрен в будущем.
Другие изменения API#
При вызове apply для сгруппированного Series возвращаемое значение также будет Series для большей согласованности с groupby поведение с DataFrame:
In [6]: df = pd.DataFrame(
...: {
...: "A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo", "foo"],
...: "B": ["one", "one", "two", "three", "two", "two", "one", "three"],
...: "C": np.random.randn(8),
...: "D": np.random.randn(8),
...: }
...: )
...:
In [7]: df
Out[7]:
A B C D
0 foo one 0.469112 -0.861849
1 bar one -0.282863 -2.104569
2 foo two -1.509059 -0.494929
3 bar three -1.135632 1.071804
4 foo two 1.212112 0.721555
5 bar two -0.173215 -0.706771
6 foo one 0.119209 -1.039575
7 foo three -1.044236 0.271860
[8 rows x 4 columns]
In [8]: grouped = df.groupby("A")["C"]
In [9]: grouped.describe()
Out[9]:
count mean std min 25% 50% 75% max
A
bar 3.0 -0.530570 0.526860 -1.135632 -0.709248 -0.282863 -0.228039 -0.173215
foo 5.0 -0.150572 1.113308 -1.509059 -1.044236 0.119209 0.469112 1.212112
[2 rows x 8 columns]
In [10]: grouped.apply(lambda x: x.sort_values()[-2:]) # top 2 values
Out[10]:
A
bar 1 -0.282863
5 -0.173215
foo 0 0.469112
4 1.212112
Name: C, Length: 4, dtype: float64
Участники#
Всего 15 человек внесли патчи в этот релиз. Люди со знаком «+» рядом с именами внесли патч впервые.
Abraham Flaxman +
Adam Klein
Andreas H. +
Chang She
Dieter Vandenbussche
Jacques Kvam +
K.-Michael Aye +
Камиль Кисиль +
Martin Blais +
Skipper Seabold
Томас Клуйвер
Wes McKinney
Wouter Overmeire
Yaroslav Halchenko
lgautier +