Все мы знаем, что Numpy — это библиотека расширений в среде Python, которая поддерживает большое количество операций с многомерными массивами и матрицами; Pandas — это также пакет для обработки и анализа данных в среде Python, а также мощная библиотека анализа данных. Оба играют важную роль в повседневном анализе данных, что было бы чрезвычайно сложно без поддержки Numpy и Pandas. Но иногда нам нужно ускорить анализ данных, есть ли способ нам помочь?
В этой статье инженер по данным и аналитике Кунал Дхаривал знакомит нас с 12 функциями Numpy и Pandas, которые упрощают и упрощают анализ данных. Наконец, читатели также могут найти Jupyter Notebook для кода, используемого в этой статье, в проекте GitHub.
x = np.array([12, 10, 12, 0, 6, 8, 9, 1, 16, 4, 6, 0])index_val = np.argpartition(x, -4)[-4:]index_valarray([1, 8, 2, 0], dtype=int64)np.sort(x[index_val])array([10, 12, 12, 16])
array1 = np.array([0.12,0.17,0.24,0.29])array2 = np.array([0.13,0.19,0.26,0.31])# with a tolerance of 0.1, it should return False:np.allclose(array1,array2,0.1)False# with a tolerance of 0.2, it should return True:np.allclose(array1,array2,0.2)True
x = np.array([3, 17, 14, 23, 2, 2, 6, 8, 1, 2, 16, 0])np.clip(x,2,5)array([3, 5, 5, 5, 2, 2, 5, 5, 2, 2, 5, 2])
# Random integersarray = np.random.randint(20, size=12)arrayarray([ 0, 1, 8, 19, 16, 18, 10, 11, 2, 13, 14, 3])# Divide by 2 and check if remainder is 1cond = np.mod(array, 2)==1condarray([False, True, False, True, False, False, False, True, False, True, False, True])# Use extract to get the valuesnp.extract(cond, array)array([ 1, 19, 11, 13, 3])# Apply condition on extract directlynp.extract(((array < 3) | (array > 15)), array)array([ 0, 1, 19, 16, 18, 2])
y = np.array([1,5,6,8,1,7,3,6,9])# Where y is greater than 5, returns index positionnp.where(y>5)array([2, 3, 5, 7, 8], dtype=int64),)# First will replace the values that match the condition, # second will replace the values that does notnp.where(y>5, "Hit", "Miss")array(['Miss', 'Miss', 'Hit', 'Hit', 'Miss', 'Hit', 'Miss', 'Hit', 'Hit'],dtype='<U4')
a = np.array([1,5,6,8,1,7,3,6,9])print("50th Percentile of a, axis = 0 : ", np.percentile(a, 50, axis =0))50th Percentile of a, axis = 0 : 6.0b = np.array([[10, 7, 4], [3, 2, 1]])print("30th Percentile of b, axis = 0 : ", np.percentile(b, 30, axis =0))30th Percentile of b, axis = 0 : [5.1 3.5 1.9]
Табличные данные с разнородными типами столбцов, например таблицы SQL или таблицы Excel;
упорядоченные и неупорядоченные (не обязательно с фиксированной частотой) данные временных рядов;
Произвольные матричные данные (однородные или разнородные) с метками строк/столбцов;
Другие произвольные наборы статистических данных. На самом деле данные вообще не нужно маркировать, чтобы они соответствовали структуре Pandas.
Простота обработки отсутствующих данных (представленных NaN) в данных с плавающей запятой и не с плавающей запятой;
Изменение размера: столбцы могут быть вставлены или удалены из DataFrame или объектов более высокого измерения;
Явные данные могут быть автоматически выровнены: объекты могут быть явно выровнены в пределах набора меток, или пользователь может просто игнорировать метки и автоматически выравнивать данные в Series, DataFrame и т. д.;
Гибкая функция группировки, выполнение таких операций, как разделение-применение-объединение наборов данных, а также объединение и преобразование данных;
Упростить процесс преобразования данных в объекты DataFrame, которые в основном представляют собой нерегулярные, по-разному индексированные данные в структурах данных Python и NumPy;
Интеллектуальные срезы, индексация и подмножество на основе меток для больших наборов данных;
Объединяйте и объединяйте наборы данных более интуитивно;
Больше гибкости в изменении формы и повороте наборов данных;
Градированные маркеры для осей (может содержать несколько маркеров);
Надежные инструменты ввода-вывода для добавления данных из плоских файлов (CSV и с разделителями), файлов Excel, баз данных и сохранения/загрузки данных из формата HDF5;
Специфические функции временных рядов: генерация диапазонов данных и преобразование частоты, статистика скользящего окна, перемещение и задержка данных и т. д.
import ioimport requests# I am using this online data set just to make things easier for you guysurl = "https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/datasets/AirPassengers.csv"s = requests.get(url).content# read only first 10 rowsdf = pd.read_csv(io.StringIO(s.decode('utf-8')),nrows=10 , index_col=0)
# create a dataframedframe = pd.DataFrame(np.random.randn(4, 3), columns=list('bde'), index=['India', 'USA', 'China', 'Russia'])#compute a formatted string from each floating point value in framechangefn = lambda x: '%.2f' % x# Make changes element-wisedframe['d'].map(changefn)
# max minus mix lambda fnfn = lambda x: x.max() - x.min()# Apply this on dframe that we've just created abovedframe.apply(fn)
# Using the dataframe we created for read_csvfilter1 = df["value"].isin([112]) filter2 = df["time"].isin([1949.000000])df [filter1 & filter2]
# creating sample series data = pd.Series(['India', 'Pakistan', 'China', 'Mongolia'])# Assigning issue that we facedata1= data# Change a valuedata1[0]='USA'# Also changes value in old dataframedata# To prevent that, we use# creating copy of series new = data.copy()# assigning new values new[1]='Changed value'# printing data print(new) print(data)
# We'll use the same dataframe that we used for read_csvframex = df.select_dtypes(include="float64")# Returns only time column
# Create a sample dataframeschool = pd.DataFrame({'A': ['Jay', 'Usher', 'Nicky', 'Romero', 'Will'], 'B': ['Masters', 'Graduate', 'Graduate', 'Masters', 'Graduate'], 'C': [26, 22, 20, 23, 24]})# Lets create a pivot table to segregate students based on age and coursetable = pd.pivot_table(school, values ='A', index =['B', 'C'], columns =['B'], aggfunc = np.sum, fill_value="Not Available") table