Skip to content

Commit 21033fe

Browse files
committed
TR updates
1 parent 9f18535 commit 21033fe

File tree

8 files changed

+70
-65
lines changed

8 files changed

+70
-65
lines changed
Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import codetiming
21
import pandas as pd
2+
from codetiming import Timer
33

44

55
def loop_cumsum(products):
66
cumulative_sum = []
7-
for row in products.itertuples():
7+
for product in products.itertuples():
88
if cumulative_sum:
99
cumulative_sum.append(
10-
cumulative_sum[-1] + (row.sales * row.unit_price)
10+
cumulative_sum[-1] + (product.sales * product.unit_price)
1111
)
1212
else:
13-
cumulative_sum.append(row.sales * row.unit_price)
13+
cumulative_sum.append(product.sales * product.unit_price)
1414
return products.assign(cumulative_income=cumulative_sum)
1515

1616

@@ -21,10 +21,8 @@ def pandas_cumsum(products):
2121
).drop(columns="income")
2222

2323

24-
for f in [pandas_cumsum, loop_cumsum]:
24+
for func in [loop_cumsum, pandas_cumsum]:
2525
products = pd.read_csv("resources/products.csv")
2626
products = pd.concat(products for _ in range(1000))
27-
with codetiming.Timer(
28-
name=f.__name__, text="{name:20}: {milliseconds:.2f} ms"
29-
):
30-
f(products)
27+
with Timer(name=func.__name__, text="{name:20}: {milliseconds:.2f} ms"):
28+
func(products)

pandas-iterate-over-rows/cumulative_sum_perfplot.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
def loop_cumsum(products):
66
cumulative_sum = []
7-
for row in products.itertuples():
7+
for product in products.itertuples():
88
if cumulative_sum:
99
cumulative_sum.append(
10-
cumulative_sum[-1] + (row.sales * row.unit_price)
10+
cumulative_sum[-1] + (product.sales * product.unit_price)
1111
)
1212
else:
13-
cumulative_sum.append(row.sales * row.unit_price)
13+
cumulative_sum.append(product.sales * product.unit_price)
1414
return products.assign(cumulative_income=cumulative_sum)
1515

1616

pandas-iterate-over-rows/how_to_loop.py

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,45 @@
33
import pandas as pd
44

55
# %% Read CSV and rename headers
6-
webs = pd.read_csv("resources/popular_websites.csv", index_col=0)
7-
6+
websites = pd.read_csv("resources/popular_websites.csv", index_col=0)
7+
print(websites)
88

99
# %% Define function to check connection
1010
def check_connection(name, url):
1111
try:
12-
httpx.get(url)
12+
response = httpx.get(url)
13+
location = response.headers.get("location")
14+
if location is None or location.startswith(url):
15+
print(f"{name} is online!")
16+
else:
17+
print(f"{name} is online! But redirects to {location}")
18+
return True
1319
except httpx.ConnectError:
14-
print("Failed to establish a connection")
20+
print(f"Failed to establish a connection with {url}")
1521
return False
16-
print(f"{name} is online!")
17-
return True
1822

1923

2024
# %% Use .itertuples() to iterate through all rows
21-
for web in webs.itertuples():
22-
check_connection(web.website, web.url)
25+
for website in websites.itertuples():
26+
check_connection(website.name, website.url)
2327

2428
# %%
25-
for _, web in webs.iterrows():
26-
check_connection(web["website"], web["url"])
29+
for _, website in websites.iterrows():
30+
check_connection(website["name"], website["url"])
2731

2832
# %% Use list comprehension to iterate through all rows
29-
[check_connection(web.website, web.url) for web in webs.itertuples()]
33+
[
34+
check_connection(website.name, website.url)
35+
for website in websites.itertuples()
36+
]
3037

3138
# %% Use the index to iterate through rows
32-
for i in webs.index:
33-
print({**webs.iloc[i]})
39+
for i in websites.index:
40+
print({**websites.iloc[i]})
3441

3542
# %% Transpose and cast to dictionary to iterate through rows
36-
for row in webs.T.to_dict().values():
37-
print(row)
43+
for website in websites.T.to_dict().values():
44+
print(website)
3845

3946
# %%
40-
webs.aggregate(["sum"])
47+
websites.aggregate(["sum"])

pandas-iterate-over-rows/products.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818

1919
cumulative_sum = []
2020

21-
for row in products.itertuples():
21+
for product in products.itertuples():
2222
if cumulative_sum:
2323
cumulative_sum.append(
24-
cumulative_sum[-1] + (row.sales * row.unit_price)
24+
cumulative_sum[-1] + (product.sales * product.unit_price)
2525
)
2626
else:
27-
cumulative_sum.append(row.sales * row.unit_price)
27+
cumulative_sum.append(product.sales * product.unit_price)
2828

2929
products.assign(cumulative_income=cumulative_sum)
3030
# %%
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
,website,url,total_views
1+
,name,url,total_views
22
0,Google,https://www.google.com,520726795305.0
33
1,YouTube,https://www.youtube.com,235813192004.0
44
2,Facebook,https://www.facebook.com,223015726428.0
55
3,Yahoo,https://www.yahoo.com,125654442849.0
6-
4,Wikipedia,https://www.wikipedia.com,44673637102.0
6+
4,Wikipedia,https://www.wikipedia.org,44673637102.0
77
5,Baidu,"https://www.baidu.com",44097593606.0
8-
6,Twitter,https://www.twitter.com,30986763501.0
9-
7,Yandex,https://www.yandex.com,28579800000.0
8+
6,Twitter,https://twitter.com,30986763501.0
9+
7,Yandex,https://yandex.com,28579800000.0
1010
8,Instagram,https://www.instagram.com,26215196370.0
1111
9,AOL,https://www.aol.com,23212320843.0
12+
10,Netscape,https://www.netscape.com,5750000.0
13+
11,Nope,https://alwaysfails.example.com,0

pandas-iterate-over-rows/take_sum.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@
44

55
# %%
66

7-
webs = pd.read_csv("resources/popular_websites.csv", index_col=0)
7+
websites = pd.read_csv("resources/popular_websites.csv", index_col=0)
88

99
# %% Best way: use the dedicated pandas method
1010

11-
webs["total_views"].sum()
11+
websites["total_views"].sum()
1212

1313
# %% List comprehension
1414

15-
sum(row.total_views for row in webs.itertuples())
15+
sum(website.total_views for website in websites.itertuples())
1616

1717
# %% itertuples()
1818

1919
total = 0
20-
for row in webs.itertuples():
21-
total += row.total_views
20+
for website in websites.itertuples():
21+
total += website.total_views
2222

2323
total
2424

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
1-
import codetiming
21
import pandas as pd
2+
from codetiming import Timer
33

44

5-
def pandas_sum(webs):
6-
return webs["total_views"].sum()
7-
8-
9-
def loop_sum(webs):
5+
def loop_sum(websites):
106
total = 0
11-
for row in webs.itertuples():
12-
total += row.total_views
7+
for website in websites.itertuples():
8+
total += website.total_views
139
return total
1410

1511

16-
def python_sum(webs):
17-
return sum(row.total_views for row in webs.itertuples())
12+
def python_sum(websites):
13+
return sum(website.total_views for website in websites.itertuples())
14+
15+
16+
def pandas_sum(websites):
17+
return websites["total_views"].sum()
1818

1919

20-
for f in [pandas_sum, loop_sum, python_sum]:
21-
webs = pd.read_csv("resources/popular_websites.csv", index_col=0)
22-
webs = pd.concat([webs for _ in range(1000)])
23-
with codetiming.Timer(
24-
name=f.__name__, text="{name:20}: {milliseconds:.2f} ms"
25-
):
26-
f(webs)
20+
for func in [loop_sum, python_sum, pandas_sum]:
21+
websites = pd.read_csv("resources/popular_websites.csv", index_col=0)
22+
websites = pd.concat([websites for _ in range(1000)])
23+
with Timer(name=func.__name__, text="{name:20}: {milliseconds:.2f} ms"):
24+
func(websites)

pandas-iterate-over-rows/take_sum_perfplot.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,26 @@
22
import perfplot
33

44

5-
def pandas_sum(df):
6-
return df["total_views"].sum()
5+
def pandas_sum(websites):
6+
return websites["total_views"].sum()
77

88

9-
def loop_sum(df):
9+
def loop_sum(websites):
1010
total = 0
11-
for row in df.itertuples():
11+
for row in websites.itertuples():
1212
total += row.total_views
1313
return total
1414

1515

16-
def python_sum(webs):
17-
return sum(row.total_views for row in webs.itertuples())
16+
def python_sum(websites):
17+
return sum(row.total_views for row in websites.itertuples())
1818

1919

20-
webs = pd.read_csv("resources/popular_websites.csv", index_col=0)
20+
websites = pd.read_csv("resources/popular_websites.csv", index_col=0)
2121

2222
plot = perfplot.bench(
2323
n_range=[i**2 for i in range(1, 1000, 100)],
24-
setup=lambda n: pd.concat([webs for _ in range(n)]),
24+
setup=lambda n: pd.concat([websites for _ in range(n)]),
2525
kernels=[pandas_sum, loop_sum, python_sum],
2626
labels=["pandas sum", "loop sum", "python sum"],
2727
)

0 commit comments

Comments
 (0)