python循环入门(Iterative)

(一)python循环基础

1.for 循环 - 基本形式
# 使用 range() 函数生成一系列数字
for i in range(5):
    print(i)
0
1
2
3
4
2.for 循环 - 遍历列表
# 遍历列表的每个元素
fruits = ["苹果", "橙子", "香蕉"]
for fruit in fruits:
    print(fruit)
苹果
橙子
香蕉
3.while 循环 - 基本形式
# 使用 while 循环计数
count = 0
while count < 5:
    print(count)
    count += 1
0
1
2
3
4
4.嵌套循环 - 打印九九乘法表
for i in range(1, 10):
    for j in range(1, 10):
        print(f"{i} * {j} = {i*j}", end="\t")
    print()  # 换行
1 * 1 = 1	1 * 2 = 2	1 * 3 = 3	1 * 4 = 4	1 * 5 = 5	1 * 6 = 6	1 * 7 = 7	1 * 8 = 8	1 * 9 = 9	
2 * 1 = 2	2 * 2 = 4	2 * 3 = 6	2 * 4 = 8	2 * 5 = 10	2 * 6 = 12	2 * 7 = 14	2 * 8 = 16	2 * 9 = 18	
3 * 1 = 3	3 * 2 = 6	3 * 3 = 9	3 * 4 = 12	3 * 5 = 15	3 * 6 = 18	3 * 7 = 21	3 * 8 = 24	3 * 9 = 27	
4 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 16	4 * 5 = 20	4 * 6 = 24	4 * 7 = 28	4 * 8 = 32	4 * 9 = 36	
5 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 25	5 * 6 = 30	5 * 7 = 35	5 * 8 = 40	5 * 9 = 45	
6 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 36	6 * 7 = 42	6 * 8 = 48	6 * 9 = 54	
7 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 49	7 * 8 = 56	7 * 9 = 63	
8 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 64	8 * 9 = 72	
9 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81	
5.循环控制语句 - break 和 continue
# 使用 break 在特定条件下终止循环
for i in range(10):
    if i == 5:
        break
    print(i)

# 使用 continue 跳过特定条件下的循环体余下部分
for i in range(10):
    if i % 2 == 0:
        continue
    print(i)
0
1
2
3
4
1
3
5
7
9

(二)python循环案例

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.graph_objects as go
import statsmodels.api as sm

# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

import warnings
warnings.filterwarnings("ignore", category=FutureWarning)


import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 指定字体
font = FontProperties(fname=r'C:\WINDOWS\Fonts\simhei.ttf')  # 请根据你的系统和字体路径修改

# 指定文件路径
file_path = r"D:\PycharmProjects\pythonProject1\Data_func.xlsx"

# 读取Excel文件中的"data" sheet
df = pd.read_excel(file_path, sheet_name="data")

# 根据type的数值生成 0 1 数值
df['transaction_type'] = np.where(df['type'] == 1, 'export', 'import')

# 创建id到字符串的映射
id_mapping = {1: "New York", 2: "Los Angeles", 3: "Tokyo", 4: "Shanghai"}

# 添加新的列'id_str',根据id映射为相应的字符串
df['id_str'] = df['id'].map(id_mapping)

# 创建id_str到洲的映射
continent_mapping = {"New York": 1, "Los Angeles": 1, "Tokyo": 2, "Shanghai": 2}

# 添加新的列'continent',根据id_str映射为相应的洲
df['continent'] = df['id_str'].map(continent_mapping)

# 添加新的列'post',根据条件设置值
df['post'] = (df['year'] > 2012).astype(int)

# 添加新的列'post',根据条件设置值
df['post'] = (df['year'] > 2012).astype(int)

print(df)
    year  id       value  type transaction_type       id_str  continent  post
0   2011   1    3.000000     1           export     New York          1     0
1   2011   1    6.000000     0           import     New York          1     0
2   2011   2   13.000000     1           export  Los Angeles          1     0
3   2011   2   19.000000     0           import  Los Angeles          1     0
4   2011   3   57.000000     1           export        Tokyo          2     0
5   2011   3   51.000000     0           import        Tokyo          2     0
6   2011   4  109.000000     1           export     Shanghai          2     0
7   2011   4  101.000000     0           import     Shanghai          2     0
8   2012   1    4.000000     1           export     New York          1     0
9   2012   1    9.000000     0           import     New York          1     0
10  2012   2   20.000000     1           export  Los Angeles          1     0
11  2012   2   34.000000     0           import  Los Angeles          1     0
12  2012   3   68.000000     1           export        Tokyo          2     0
13  2012   3   77.000000     0           import        Tokyo          2     0
14  2012   4  151.000000     1           export     Shanghai          2     0
15  2012   4  164.000000     0           import     Shanghai          2     0
16  2013   1   72.280243     1           export     New York          1     1
17  2013   1   31.164486     0           import     New York          1     1
18  2013   2   32.016239     1           export  Los Angeles          1     1
19  2013   2   78.660613     0           import  Los Angeles          1     1
20  2013   3   25.595920     1           export        Tokyo          2     1
21  2013   3   95.224212     0           import        Tokyo          2     1
22  2013   4   92.510777     1           export     Shanghai          2     1
23  2013   4   97.412295     0           import     Shanghai          2     1
24  2014   1   33.020932     1           export     New York          1     1
25  2014   1   27.992993     0           import     New York          1     1
26  2014   2   51.596583     1           export  Los Angeles          1     1
27  2014   2   50.258884     0           import  Los Angeles          1     1
28  2014   3   39.142033     1           export        Tokyo          2     1
29  2014   3   47.735438     0           import        Tokyo          2     1
30  2014   4   85.551489     1           export     Shanghai          2     1
31  2014   4   92.394758     0           import     Shanghai          2     1
a.对字符进行循环处理
  • 如果不使用循环
# 根据条件对数据进行处理
df['value'] = df.apply(lambda row: row['value'] / 2 if row['id_str'] in ['New York', 'Shanghai'] else row['value'], axis=1)

# 打印处理后的数据
#print(df)

这行代码使用了apply函数和一个匿名函数(lambda函数)来修改DataFrame df中的’value’列。

  • df[‘value’]: 选择DataFrame中的’value’列。

  • df.apply(…): apply函数用于沿着DataFrame的轴应用一个函数。在这里,它沿轴1操作,这意味着它将函数应用于每一行。

  • lambda row: row[‘value’] / 2 if row[‘id_str’] in [‘New York’, ‘Shanghai’] else row[‘value’]: 这是一个匿名函数,接受每一行作为输入。它检查该行’id_str’列的值是否为’New York’或’Shanghai’。如果是,它将’value’除以2;否则,保持’value’不变。

  • axis=1: 指定匿名函数应用于每一行。

因此,这行代码的总体效果是,对于’id_str’是’New York’或’Shanghai’的行,将’value’除以2;对于其他行,保持’value’不变。修改后的’value’列然后被赋值回DataFrame中原始的’value’列。

  • 如果使用循环
# 使用循环对数据进行处理
for index, row in df.iterrows():
    if row['id_str'] in ['New York', 'Shanghai']:
        df.at[index, 'value'] /= 2

# 打印处理后的数据
#print(df)

这段代码使用循环(for循环)来遍历DataFrame中的每一行,并根据特定条件对数据进行处理。

  • for index, row in df.iterrows():: 这是一个for循环,使用iterrows()方法遍历DataFrame df中的每一行。在每次迭代中,index是行索引,row是包含该行数据的Series对象。

  • if row[‘id_str’] in [‘New York’, ‘Shanghai’]:: 这是一个条件语句,检查当前行的’id_str’列是否包含在列表[‘New York’, ‘Shanghai’]中。

  • df.at[index, ‘value’] /= 2: 如果条件为真(‘id_str’是’New York’或’Shanghai’),则执行此行代码。它使用df.at[]方法访问DataFrame中特定位置的值,然后将’value’除以2。这样就实现了对’id_str’为’New York’或’Shanghai’的行的’value’列进行除以2的操作。

b.对数值进行循环处理
# 使用循环对数据进行处理
for index, row in df.iterrows():
    if row['year'] > 2011 and row['transaction_type'] == 'export':
        df.at[index, 'value'] /= 2
# 循环处理数据
for index, row in df.iterrows():
    if row['year'] > 2011:
        df.at[index, 'value'] /= 2

# 打印处理后的 DataFrame
print(df)
    year  id      value  type transaction_type       id_str  continent  post
0   2011   1   0.750000     1           export     New York          1     0
1   2011   1   1.500000     0           import     New York          1     0
2   2011   2  13.000000     1           export  Los Angeles          1     0
3   2011   2  19.000000     0           import  Los Angeles          1     0
4   2011   3  57.000000     1           export        Tokyo          2     0
5   2011   3  51.000000     0           import        Tokyo          2     0
6   2011   4  27.250000     1           export     Shanghai          2     0
7   2011   4  25.250000     0           import     Shanghai          2     0
8   2012   1   0.250000     1           export     New York          1     0
9   2012   1   1.125000     0           import     New York          1     0
10  2012   2   5.000000     1           export  Los Angeles          1     0
11  2012   2  17.000000     0           import  Los Angeles          1     0
12  2012   3  17.000000     1           export        Tokyo          2     0
13  2012   3  38.500000     0           import        Tokyo          2     0
14  2012   4   9.437500     1           export     Shanghai          2     0
15  2012   4  20.500000     0           import     Shanghai          2     0
16  2013   1   4.517515     1           export     New York          1     1
17  2013   1   3.895561     0           import     New York          1     1
18  2013   2   8.004060     1           export  Los Angeles          1     1
19  2013   2  39.330306     0           import  Los Angeles          1     1
20  2013   3   6.398980     1           export        Tokyo          2     1
21  2013   3  47.612106     0           import        Tokyo          2     1
22  2013   4   5.781924     1           export     Shanghai          2     1
23  2013   4  12.176537     0           import     Shanghai          2     1
24  2014   1   2.063808     1           export     New York          1     1
25  2014   1   3.499124     0           import     New York          1     1
26  2014   2  12.899146     1           export  Los Angeles          1     1
27  2014   2  25.129442     0           import  Los Angeles          1     1
28  2014   3   9.785508     1           export        Tokyo          2     1
29  2014   3  23.867719     0           import        Tokyo          2     1
30  2014   4   5.346968     1           export     Shanghai          2     1
31  2014   4  11.549345     0           import     Shanghai          2     1
# 循环处理每个年份大于2011的数据
for year in df['year'].unique():
    if year > 2011:
        mask = df['year'] == year
        df.loc[mask, 'value'] /= 2

# 打印处理后的 DataFrame
print(df)

##遍历年份: 使用 df['year'].unique() 获取 DataFrame 中 'year' 列的所有唯一值(独特的年份),然后使用 for year in ... 循环遍历这些年份。
##条件检查: 在循环中,通过 if year > 2011: 进行条件检查,仅处理大于2011的年份对应的数据。
##生成掩码(Mask): 使用 mask = df['year'] == year 创建一个布尔掩码,该掩码标识了 DataFrame 中 'year' 列等于当前循环年份的行。
##数据处理: 使用 df.loc[mask, 'value'] /= 2 对符合条件的行中 'value' 列的值进行除以2的操作。
##打印处理后的 DataFrame: 在循环结束后,使用 print(df) 打印处理后的 DataFrame,以便查看处理结果。
    year  id      value  type transaction_type       id_str  continent  post
0   2011   1   0.750000     1           export     New York          1     0
1   2011   1   1.500000     0           import     New York          1     0
2   2011   2  13.000000     1           export  Los Angeles          1     0
3   2011   2  19.000000     0           import  Los Angeles          1     0
4   2011   3  57.000000     1           export        Tokyo          2     0
5   2011   3  51.000000     0           import        Tokyo          2     0
6   2011   4  27.250000     1           export     Shanghai          2     0
7   2011   4  25.250000     0           import     Shanghai          2     0
8   2012   1   0.125000     1           export     New York          1     0
9   2012   1   0.562500     0           import     New York          1     0
10  2012   2   2.500000     1           export  Los Angeles          1     0
11  2012   2   8.500000     0           import  Los Angeles          1     0
12  2012   3   8.500000     1           export        Tokyo          2     0
13  2012   3  19.250000     0           import        Tokyo          2     0
14  2012   4   4.718750     1           export     Shanghai          2     0
15  2012   4  10.250000     0           import     Shanghai          2     0
16  2013   1   2.258758     1           export     New York          1     1
17  2013   1   1.947780     0           import     New York          1     1
18  2013   2   4.002030     1           export  Los Angeles          1     1
19  2013   2  19.665153     0           import  Los Angeles          1     1
20  2013   3   3.199490     1           export        Tokyo          2     1
21  2013   3  23.806053     0           import        Tokyo          2     1
22  2013   4   2.890962     1           export     Shanghai          2     1
23  2013   4   6.088268     0           import     Shanghai          2     1
24  2014   1   1.031904     1           export     New York          1     1
25  2014   1   1.749562     0           import     New York          1     1
26  2014   2   6.449573     1           export  Los Angeles          1     1
27  2014   2  12.564721     0           import  Los Angeles          1     1
28  2014   3   4.892754     1           export        Tokyo          2     1
29  2014   3  11.933859     0           import        Tokyo          2     1
30  2014   4   2.673484     1           export     Shanghai          2     1
31  2014   4   5.774672     0           import     Shanghai          2     1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengke25

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值