צ׳יט שיט SQL ל-Pandas
מעוניינים להמיר את הידע שלכם ב-SQL לפקודות Pandas . להלן צ׳יט שיט המציג השוואה בין פקודות SQL נפוצות לבין המקבילות שלהן ב-Pandas, ומאפשר להבין בקלות איך לבצע פעולות אנליטיות שונות.
לפני שיוצאים לדרך – יש לציין: פעמים רבות ב-Pandas יש יותר מדרך אחת לביצוע אותה פעולה. בצ׳יט שיט המצורף, הדרך הישירה והפשוטה ביותר לרוב היא שמצויינת.
Table of Contents
Basic SQL Statements
* df is a common variable name used to refer to a DataFrame object
| SQL Command | Pandas Equivalent |
|---|---|
| Select all | df |
| Select specific columns | df[['column1', 'column2']] |
| Arithmetic operations | df['column'] + value |
| String concatenation | df['col1'] + ' ' + df['col2'] |
| Column alias | df.rename(columns={'old_col': 'new_col'}) |
| Distinct values of a single column | df['column'].unique() |
| Distinct values of multiple columns | df.drop_duplicates(['column1', 'column2']) |
Filter the Dataset
| SQL Command | Pandas Equivalent |
|---|---|
| WHERE column = value | df.query("column == value") |
| WHERE column > value | df.query("column > value") |
| WHERE column < value | df.query("column < value") |
| WHERE column >= value | df.query("column >= value") |
| WHERE column <= value | df.query("column <= value") |
| WHERE column != value | df.query("column != value") |
| WHERE column IN (value1, value2, …) | df[df['column'].isin([value1, value2])] |
| WHERE column BETWEEN value1 AND value2 | df[(df['column'] >= value1) & (df['column'] <= value2)] |
| WHERE column LIKE 'pattern' | df[df['column'].str.contains('pattern')] |
| WHERE column IS NULL | df[df['column'].isnull()] |
| WHERE column IS NOT NULL | df[df['column'].notnull()] |
| WHERE condition1 AND condition2 | df[(condition1) & (condition2)] |
| WHERE condition1 OR condition2 | df[(condition1) | (condition2)] |
Sort the Result Set
| SQL Command | Pandas Equivalent |
|---|---|
| ORDER BY column ASC | df.sort_values(by='column') |
| ORDER BY column DESC | df.sort_values(by='column', ascending=False) |
| ORDER BY column1, column2 DESC | df.sort_values(by=['column1', 'column2'], ascending=[True, False]) |
Limit the Result Set
| SQL Command | Pandas Equivalent |
|---|---|
| SELECT … LIMIT N | df.head(N) |
| SELECT … ORDER BY … LIMIT N | df.sort_values(by='column').head(N) |
Common Functions
String Related Functions
| SQL Command | Pandas Equivalent |
|---|---|
| SELECT RIGHT('hello', 2) | df['column'].str[-2:] |
| SELECT LEFT('hello', 2) | df['column'].str[:2] |
| SELECT LENGTH('hello') | df['column'].str.len() |
| REPLACE('hello world', 'l', '*') | df['column'].str.replace('l', '*') |
| REVERSE('hello') | df['column'].apply(lambda x: x[::-1]) |
| SUBSTRING('hello world', 2, 3) | df['column'].str[1:4] |
| LOWER('HELLO') | df['column'].str.lower() |
| UPPER('hello') | df['column'].str.upper() |
| POSITION('e' IN 'hello') | df['column'].str.find('e') |
Numeric Functions
| SQL Command | Pandas Equivalent |
|---|---|
| ROUND(value, 1) | df['column'].round(1) |
| FLOOR(value) | df['column'].apply(np.floor) |
| CEIL(value) | df['column'].apply(np.ceil) |
| ABS(value) | df['column'].abs() |
| SQRT(value) | df['column'].apply(np.sqrt) |
| POWER(x, y) | df['column'] ** y |
Converting Values using CAST
| SQL Command | Pandas Equivalent |
|---|---|
| CAST(value AS INT) | df['column'].astype(int) |
| CAST(value AS CHAR) | df['column'].astype(str) |
| CAST(value AS DATE) | pd.to_datetime(df['column']) |
Date Related Functions
| SQL Command | Pandas Equivalent |
|---|---|
| CURDATE() | pd.Timestamp.now().date() |
| DATE_ADD(date, INTERVAL 1 YEAR) | df['column'] + pd.DateOffset(years=1) |
| TIMESTAMPDIFF(unit, date1, date2) | (df['date2'] – df['date1']).dt.days |
| YEAR(date) | df['column'].dt.year |
| MONTH(date) | df['column'].dt.month |
| DAY(date) | df['column'].dt.day |
Null Handling Functions
| SQL Command | Pandas Equivalent |
|---|---|
| IFNULL(column, value) | df['column'].fillna(value) |
Conditional Expressions
| SQL Command | Pandas Equivalent |
|---|---|
| CASE WHEN condition THEN result ELSE other_result END | np.where(condition, result, other_result) |
Common Group Operations
| SQL Command | Pandas Equivalent |
|---|---|
| AVG(column) | df['column'].mean() |
| MIN(column) | df['column'].min() |
| MAX(column) | df['column'].max() |
| SUM(column) | df['column'].sum() |
| COUNT(*) | df['column'].size |
| COUNT(column) | df['column'].count() |
| COUNT(DISTINCT column) | df['column'].nunique() |
| GROUP BY column | df.groupby('column').agg({'other_column': 'mean'}) |
| HAVING condition | df.groupby('column').filter(lambda x: condition) |
Cumulative / Window Functions
| SQL Command | Pandas Equivalent |
|---|---|
| AVG() OVER () | df['column'].expanding().mean() |
| SUM() OVER () | df['column'].expanding().sum() |
| COUNT() OVER () | df['column'].expanding().count() |
| AVG() OVER (PARTITION BY …) | df.groupby('partition_column')['column'].transform('mean') |
| SUM() OVER (PARTITION BY …) | df.groupby('partition_column')['column'].transform('sum') |
| COUNT() OVER (PARTITION BY …) | df.groupby('partition_column')['column'].transform('count') |
Ranking Functions
| SQL Command | Pandas Equivalent |
|---|---|
| RANK() OVER (PARTITION BY … ORDER BY …) | df['rank'] = df.groupby('partition_column')['order_column'].rank(method='min', ascending=True) |
| DENSE_RANK() OVER (PARTITION BY … ORDER BY …) | df['dense_rank'] = df.groupby('partition_column')['order_column'].rank(method='dense', ascending=True) |
| ROW_NUMBER() OVER (PARTITION BY … ORDER BY …) | df['row_number'] = df.groupby('partition_column')['order_column'].rank(method='first', ascending=True) |
Other Analytic Functions
| SQL Command | Pandas Equivalent |
|---|---|
| LAG(column) OVER (PARTITION BY .. ) | df['lag'] = df.groupby('partition_column')['column'].shift(1) |
| LEAD(column) OVER (PARTITION BY .. ) | df['lead'] = df.groupby('partition_column')['column'].shift(-1) |
Join Operations
| SQL Command | Pandas Equivalent |
|---|---|
| INNER JOIN | pd.merge(df1, df2, on='column') |
| LEFT JOIN | pd.merge(df1, df2, on='column', how='left') |
| RIGHT JOIN | pd.merge(df1, df2, on='column', how='right') |
| FULL OUTER JOIN | pd.merge(df1, df2, on='column', how='outer') |
Set Operations
| SQL Command | Pandas Equivalent |
|---|---|
| UNION | pd.concat([df1, df2]).drop_duplicates() |
| UNION ALL | pd.concat([df1, df2]) |
| INTERSECT | pd.merge(df1, df2) |
| EXCEPT | df1[~df1['column'].isin(df2['column'])] |
Pivot and Unpivot
| Operation | SQL Command | Pandas Equivalent |
|---|---|---|
| Pivot | PIVOT (SUM(value) FOR column IN (…)) | df.pivot_table(values='value', index='row_index', columns='column', aggfunc='sum') |
| Unpivot | UNPIVOT(column FOR value IN (…)) | df.melt(id_vars=['row_index'], value_vars=['column1', 'column2'], var_name='column', value_name='value') |
המדריך לדאטה-אנליסט
בואו לבקר במאגר המידע הגדול ביותר בעברית! גלו הרצאות וסשנים מרתקים של מומחים מהתעשייה, וצללו לעולם שלם של פוסטים מעמיקים בנושאים שונים.