Предварительные требования: основы Python и NumPy.

Вступление

Pandas - это простая в использовании и очень мощная библиотека для анализа данных. Как и NumPy, он векторизует большинство основных операций, которые могут быть вычислены параллельно даже на ЦП, что приводит к более быстрым вычислениям. Указанные здесь операции очень просты, но слишком важны, если вы только начинаете работать с Pandas. Вам потребуется импортировать панды как «pd», а затем использовать объект «pd» для выполнения других основных операций с пандами.

  1. Как читать данные из файла CSV или текстового файла?

CSV-файл разделяется запятыми, поэтому, чтобы прочитать CSV-файл, выполните следующие действия:

df = pd.read_csv(file_path, sep=’,’, header = 0, index_col=False,names=None)
Explanation:
‘read_csv’ function has a plethora of parameters and I have specified only a few, ones that you may use most often. A few key points:
a) header=0 means you have the names of columns in the first row in the file and if you don’t you will have to specify header=None
b) index_col = False means to not use the first column of the data as an index in the data frame, you might want to set it to true if the first column is really an index.
c) names = None implies you are not specifying the column names and want it to be inferred from csv file, which means that your header = some_number contains column names. Otherwise, you can specify the names in here in the same order as you have the data in the csv file. 
If you are reading a text file separated by space or tab, you could simply change the sep to be:
sep = " " or sep='\t'

2. Как создать фрейм данных, используя словарь уже существующих столбцов или 2D-массивов NumPy?

Использование словаря

# c1, c2, c3, c4 are column names. 
d_dic ={'first_col_name':c1,'second_col_names':c2,'3rd_col_name':c3} df = pd.DataFrame(data = d_dic)

Использование массивов NumPy

np_data = np.zeros((no_of_samples,no_of_features)) #any_numpy_array
df = pd.DataFrame(data=np_data, columns = list_of_Col_names)

3. Как визуализировать верхнее и нижнее значения x во фрейме данных?

df.head(num_of_rows_to_view) #top_values
df.tail(num_of_rows_to_view) #bottom_values
col = list_of_columns_to_view 
df[col].head(num_of_rows_to_view)
df[col].tail(num_of_rows_to_view)

4. Как переименовать один или несколько столбцов?

df = pd.DataFrame(data={'a':[1,2,3,4,5],'b':[0,1,5,10,15]})
new_df = df.rename({'a':'new_a','b':'new_b'})

Важно сохранить фрейм возвращаемых данных в новом фрейме данных #, поскольку переименование не на месте.

5. Как получить имена столбцов в списке?

df.columns.tolist()

Отказ от использования функции tolist () также выполняет свою работу, если вы хотите только перебирать имена, но она возвращает все как объект индекса.

6. Как узнать частоту значений в серии?

df[col].value_counts() #returns a mapper of key,frequency pair
df[col].value_counts()[key] to get frequency of a key value

7. Как сбросить индекс до существующего столбца, другого списка или массива?

new_df = df.reset_index(drop=True,inplace=False)

Если вы укажете inplace = True, нет необходимости сохранять его в new_df. Кроме того, когда вы сбрасываете индекс на pandas RangeIndex (), у вас есть возможность либо сохранить старый индекс, либо удалить его с помощью параметра drop. Вы можете оставить его, особенно если изначально это был один из столбцов, и вы временно установили его как новый индекс.

8. Как удалить столбец?

df.drop(columns = list_of_cols_to_drop)

9. Как изменить индекс во фрейме данных?

df.set_index(col_name,inplace=True)

Это установит col_name col в качестве индекса. Вы можете передать более одного столбца, чтобы установить их в качестве индекса. ключевое слово inplace служит той же цели, что и раньше.

10. Как удалить строки или столбцы, если в них есть значения NAN?

df.dropna(axis=0,inplace=True)

axis = 0 удалит любой столбец со значениями nan, которые вам могут не понадобиться в большинстве случаев. axis = 1 удалит только те строки, которые имеют значения nan в любом из столбцов. inplace такой же, как указано выше.

11. Как разрезать фрейм данных с учетом условия?

Вам всегда нужно указывать маску в виде логических условий.
Например, если у вас есть возраст столбца и вы хотите выбрать фрейм данных, в котором столбец возраста имеет определенное значение или находится в списке. Затем вы можете добиться нарезки следующим образом:

mask = df['age'] == age_value 
or
mask = df['age].isin(list_of_age_values)
result = df[mask]

с несколькими условиями: например. Выбор строк, в которых рост и возраст соответствуют определенным значениям.

mask = (df['age']==age_value) & (df['height'] == height_value)
result = df[mask]

12. Как разрезать фрейм данных с учетом имен столбцов или значений индекса строк?

Здесь есть 4 варианта: at, iat, loc и iloc. Среди них «iat» и «iloc» похожи в том смысле, что они обеспечивают индексацию на основе целых чисел, в то время как «loc» и «at» обеспечивают индексацию на основе имени.

Еще одна вещь, на которую следует обратить внимание, это то, что «iat» при «обеспечении» индексации для одного элемента, при использовании «loc» и «iloc» можно нарезать более одного элемента.

Examples:
a) 
df.iat[1,2] provides the element at 1th row and 2nd column. Here it's important to note that number 1 doesn't correspond to 1 in index column of dataframe. It's totally possible that index in df does not have 1 at all. It's like python array indexing.
b)
df.at[first,col_name] provides the value in the row where index value is first and column name is col_name
c)
df.loc[list_of_indices,list_of_cols] 
eg df.loc[[4,5],['age','height']]
Slices dataframe for matching indices and column names
d)
df.iloc[[0,1],[5,6]] used for interger based indexing will return 0 and 1st row for 5th and 6th column.

13. Как перебирать строки?

iterrows() and itertuples()
for i,row in df.iterrows():
    sum+=row['hieght']
iterrows() passess an iterators over rows which are returned as series. If a change is made to any of the data element of a row, it may reflect upon the dataframe as it does not return a copy of rows.
itertuples() returns named tuples
for row in df.itertuples():
    print(row.age)

14. Как сортировать по столбцу?

df.sort_values(by = list_of_cols,ascending=True) 

15. Как применить функцию к каждому элементу серии?

df['series_name'].apply(f) 
where f is the function you want to apply to each element of the series. If you also want to pass arguments to the custom function, you could modify it like this.
def f(x,**kwargs):
    #do_somthing
    return value_to_store
df['series_name'].apply(f, a= 1, b=2,c =3)
If you want to apply a function to more than a series, then:
def f(row):
    age = row['age']
    height = row['height']
df[['age','height']].apply(f,axis=1)
If you don't use axis=1, f will be applied to each element of both the series. axis=1 helps to pass age and height of each row for any manipulation you want.

16. Как применить функцию ко всем элементам во фрейме данных?

new_df = df.applymap(f)

17. Как разрезать фрейм данных, если значения ряда находятся в списке?

Используйте маскировку и isin. Чтобы выбрать образцы данных, возраст которых находится в списке:

df[df['age'].isin(age_list)]

Чтобы выбрать противоположное, в выборках данных, возраст которых не указан в списке, используются:

df[~df['age'].isin(age_list)]

18. Как сгруппировать значения столбца и агрегировать по другому столбцу или применить к нему функцию?

df.groupby(['age']).agg({'height':'mean'})

Это сгруппирует фрейм данных по серии «возраст», а для столбца высоты будет применяться среднее значение сгруппированных значений. Иногда может случиться так, что вы захотите сгруппировать по определенному столбцу и преобразовать все соответствующие сгруппированные элементы для других столбцов в список. Вы можете добиться этого следующим образом:

df.groupby(['age']).agg(list)

19. Как создать дубликаты для других столбцов для каждого элемента в списке определенного столбца?

Вопрос может немного сбить с толку. На самом деле я имею в виду, что у вас есть следующий фрейм данных df:

Age Height(in cm)
20  180
20  175
18  165
18  163
16  170

После применения группировки с агрегатором списков вы можете получить что-то вроде:

Age Height(in cm)
20  [180,175]
18  [165,163]
16  [170]

А что, если вы хотите вернуться к исходному фрейму данных, отменив последнюю операцию? Вы можете добиться этого, используя недавно введенную операцию под названием explode в pandas версии 0.25.

df['height'].explode() will give the desired outcome.

20. Как объединить два фрейма данных?

Предположим, у вас есть два фрейма данных df1 и df2 с заданными именем столбца, возрастом и высотой, и вы хотите добиться объединения этих двух столбцов. axis = 0 - вертикальная ось. Здесь к результирующему кадру данных будут добавлены столбцы из кадров данных:

df1 --> name,age,height
df2---> name,age,height
result = pd.concat([df1,df2],axis=0)

Для горизонтальной конкатенации

df1--> name,age
df2--->height,salary
result = pd.concat([df1,df2], axis=1) 

21. Как объединить два фрейма данных?

For the previous example, assume you have an employee database forming two dataframes like
df1--> name, age, height
df2---> name, salary, pincode, sick_leaves_taken
You may want to combine these two dataframe such that each row has all details of an employee. In order to acheive this, you would have to perform a merge operation.
df1.merge(df2, on=['name'],how='inner')
This operation will provide a dataframe where each row will comprise of name, age, height, salary, pincode, sick_leaves_taken. 
how = 'inner' means include the row in result if there is a matching name in both the data frames. For more read: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html?highlight=merge#pandas.DataFrame.merge

Заворачивать

Для любого проекта анализа данных как новичку вам может потребоваться очень хорошо знать эти операции. Я всегда считал Pandas очень полезной библиотекой, и теперь вы можете интегрироваться с различными другими инструментами и языками анализа данных. Знание операций pandas может даже помочь при изучении языков, поддерживающих распределенные алгоритмы.

Контакт

Если вам понравился этот пост, похлопайте в ладоши и поделитесь им с другими, которые могут найти его полезным. Мне очень нравится наука о данных, и если она вам тоже интересна, давайте подключимся к LinkedIn или подпишемся на меня, чтобы перейти к платформе для анализа данных.