Python beginner tips

Learning python, begginer level

Introduction

I spent around 4 years working with R, and I can say that R is amazing. However, I decided to start a new stage in my professional life, and a need came, a multi proposal language. My option was Python, because It provides have data science tools, and has a huge support for others applications.

After some months, studying in my free time, I would like to share some code that I learned (from several sources). Moreover, to write a blog is a way to improve my learning.

Getting values from dictionary

>>> dic = {'Mary': '1235'}
>>> try:
        V = dic['some']
    except KeyError:
        V = 'error'
>>> V
'error'

Instead, You can try it

>>> V = dic.get('Mary')
>>> V
'1235'

Or for a second parameter:

>>> V = dic.get('some', -99)
>>> V
-99

Conditional

For some values

>>> a, b, c, d = 10, 20, 30, 40
>>> if a == 10 and b == 20 and c == 30 and d == 40:
        print('all True!')
>>> all True!

We can simplify, let’s try:

>>> cond1 = [a == 10,
             b == 20,
             c == 30,
             d == 40]

>>> if all(cond1):
       print('All is true')
>>> All is true

# if we change the conditions

cond2 = [
    a == 910,
    b == 920,
    c == 930,
    d == 40]

>>> if any(cond2):
    print('one is true at least')
>>> one is true at least

A more complex example. For instance you have cars sells, for 3 sellers in 3 months. You would like to know for March what seller achieved the goal. The goal is more than 3 cars in march and a profit greater than 0.25.


# import packs
>>> import pandas as pd
>>> import numpy as np
# data frame
>>> DF = pd.DataFrame({"MONTH": np.repeat(['Jan', 'Fev', 'Mar'], 3),
        "SELLER": np.tile(['Max', 'Ted', 'Saul'], 3),
        "CARSOLD": [6, 4, 5, 2, 4, 4, 2, 3, 3],
        "PROFIT": [0.3, 0.2, 0.2, 0.4, 0.2, 0.1, 0.25, 0.3, 0.3]})

>>> DF
  MONTH SELLER  CARSOLD  PROFIT
0   Jan    Max        6    0.30
1   Jan    Ted        4    0.20
2   Jan   Saul        5    0.20
3   Fev    Max        2    0.40
4   Fev    Ted        4    0.20
5   Fev   Saul        4    0.10
6   Mar    Max        2    0.25
7   Mar    Ted        3    0.30
8   Mar   Saul        3    0.30

# numpy can help us 
# condition
>>> cond3 = [
    (DF['MONTH'] == 'Mar') & (DF['CARSOLD'] >= 3) & (DF['PROFIT'] >= 0.25),
    (DF['MONTH'] == 'Mar') & (DF['CARSOLD'] < 3) & (DF['PROFIT'] < 0.25)
    ]
>>> choices = ['reward', 'regular']
# running, note that np.select provide a standard value 'nomatch' 
>>> DF['RESULT'] = np.select(cond3, choices, 'nomatch')

>>> DF
  MONTH SELLER  CARSOLD  PROFIT   RESULT
0   Jan    Max        6    0.30  nomatch
1   Jan    Ted        4    0.20  nomatch
2   Jan   Saul        5    0.20  nomatch
3   Fev    Max        2    0.40  nomatch
4   Fev    Ted        4    0.20  nomatch
5   Fev   Saul        4    0.10  nomatch
6   Mar    Max        2    0.25  nomatch
7   Mar    Ted        3    0.30   reward
8   Mar   Saul        3    0.30   reward

Loop

Usually:

>>> l1 = [1, 2, 3]

# a math operation
>>> l1_new = []
>>> for x in l1:
        l1_new.append(x + 1)
>>> l1_new
[2, 3, 4]

All in one line:

>>> l1_new  = [x + 1 for x in l1]
>>> l1_new
[2, 3, 4]

Functions in one line

When We need to replace a value in a list, we can use several tools, but now, We want use a function. If We have a list with some letters, and We need to replace by numbers:

  • x = 0
>>> l2 = ['x', 'y', 'y', 'z', 'a', 'b']

# function

>>> def replace_value(alist):
        new_list = []
        for i in alist:
            if i == 'x':
                new_list.append(0)
            else:
                new_list.append(i)
        return(new_list)

>>> replace_value(l2)
[0, 'y', 'y', 'z', 'a', 'b']

We can decrease the code size:


# function
>>> def replace_v(i):
        if i == 'x':
            return 0
        return i

>>> l2_new = []
>>> for i in l2:
        l2_new.append(replace_v(i))

>>> l2_new
[0, 'y', 'y', 'z', 'a', 'b']

A little bit smaller:

# function
>>> repl = lambda i: 0 if i == 'x' else i

>>> l2_new = []
>>> for i in l2:
        l2_new.append(repl(i))
>>> l2_new
[0, 'y', 'y', 'z', 'a', 'b']

Conclusion

Python provides several ways to do the same thing. In my opinion, at the begin, you should not worry about the size of your code. First of all, your code must work correctly, after that you can think about processing speed, and for last one action, you can think about the size of your code.

 Share!

 
comments powered by Disqus