Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions data_analysis/Ch4.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -825,6 +825,10 @@
}
],
"source": [
"#使用代理服务器发送请求\n",
"headers = {\n",
" \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36\"\n",
"}\n",
"httpproxy_handler=urllib.request.ProxyHandler({\"http\":\"124.88.67.81:80\"})\n",
"nullproxy_handler=urllib.request.ProxyHandler({})\n",
"proxy_switch=True\n",
Expand All @@ -836,7 +840,7 @@
" opener=urllib.request.build_opener(nullproxy_handler)\n",
"request=urllib.request.Request(\"https://www.bilibili.com/\", headers=headers)\n",
"response=opener.open(request)\n",
"print(response.read())\n"
"print(response.read())"
]
},
{
Expand Down Expand Up @@ -2760,4 +2764,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
15 changes: 9 additions & 6 deletions data_analysis/Ch5.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -370,8 +370,9 @@
}
],
"source": [
"pair.match(\"718ak\").group(1)\n",
"#报错是因为没有成对的字符,无法引用第一个捕获的字符。"
"m = pair.match(\"718ak\")\n",
"print(m.group(1) if m else None) # 没有成对的字符时返回None,避免AttributeError\n",
"#原写法 pair.match(\"718ak\").group(1) 会报错,因为没有成对的字符,match()返回None,调用None.group(1)报AttributeError"
]
},
{
Expand Down Expand Up @@ -1118,10 +1119,12 @@
}
],
"source": [
"#有些标签的属性名称是不能使用的\n",
"#有些标签的属性名称是不能使用的(如带连字符的属性名data-foo),需要用attrs参数传入字典\n",
"data_soup=BeautifulSoup('<div data-foo=\"value\">foo!</div>','lxml')\n",
"data_soup.find_all(data-foo=\"value\")\n",
"#报错,可匹配的结果\n",
"#错误写法:data_soup.find_all(data-foo=\"value\") # SyntaxError: data-foo不是合法的Python标识符\n",
"#正确写法:使用attrs参数传入字典\n",
"result = data_soup.find_all(attrs={'data-foo': 'value'})\n",
"print(result)\n",
"#[<div data-foo=\"value\">foo!</div>]"
]
},
Expand Down Expand Up @@ -1849,4 +1852,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}
22 changes: 11 additions & 11 deletions pandas/ch3.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,8 @@
"metadata": {},
"outputs": [],
"source": [
"#使用循环方式完成数据清洗\n",
"for i in range(df.shape[0]):\n",
" for j in df.columns:\n",
" df.loc[i, j] = str(df.loc[i, j]).replace(' ', '')\n",
"#使用向量化方式完成数据清洗(比循环方式快100-1000倍)\n",
"df = df.map(lambda x: str(x).replace(' ', ''))\n",
"df"
]
},
Expand All @@ -179,8 +177,8 @@
"metadata": {},
"outputs": [],
"source": [
"#applymap函数完成数据清洗\n",
"df = df.applymap(lambda x:str(x).replace(' ',''))\n",
"#map函数完成数据清洗(pandas 2.x中applymap已弃用,改用map)\n",
"df = df.map(lambda x:str(x).replace(' ',''))\n",
"df"
]
},
Expand Down Expand Up @@ -268,11 +266,13 @@
"metadata": {},
"outputs": [],
"source": [
"#按行(axis=1)的实现计算毛利率,计算结果后添加”%”,并存储在【销售毛利率】列\n",
"#按行(axis=1)的实现计算毛利率,计算结果后添加\"%\",并存储在【销售毛利率】列\n",
"def func_01(row):\n",
" row['销售毛利率']=format(row['销售毛利']/row['销售收入'],'2%')#format()格式化函数\n",
" return row\n",
"data[['销售收入','销售成本','销售毛利']].apply(func_01,axis=1)"
"#需要对完整的data应用func_01,并将结果赋值回data,才能保存新增的【销售毛利率】列\n",
"data=data.apply(func_01,axis=1)\n",
"data"
]
},
{
Expand All @@ -282,8 +282,8 @@
"metadata": {},
"outputs": [],
"source": [
"#将DataFrame中销售收入,销售成本和销售毛利统一保留一位小数显示\n",
"data[['销售收入','销售成本','销售毛利']].applymap(lambda x:\"%.1f\"%x)"
"#将DataFrame中销售收入,销售成本和销售毛利统一保留一位小数显示(pandas 2.x中applymap已弃用,改用map)\n",
"data[['销售收入','销售成本','销售毛利']].map(lambda x:\"%.1f\"%x)"
]
},
{
Expand Down Expand Up @@ -458,4 +458,4 @@
},
"nbformat": 4,
"nbformat_minor": 5
}
}