嗨,大家好,我是花姐,今天给大家分享一个"反内卷"的小故事。
事情是这样的:那天,老板突然拍着桌子找我,说:"花姐啊,这里有个Excel文件,里面有1万多个客户手机号,你按照归属地分分类,尽快给我。"
我当时脑袋一嗡,心想:"老板,靠人肉分类?属实有点离谱了!"不过,我是谁啊,咱可是个Python开发者!面对1万个手机号,咱用代码来搞定,不仅轻松还贼快!💪
以下所看到的手机号码均为程序随机生成,都是假的,都是假的,都是假的!
一、问题拆解
任务是这样的:
- 输入:一个Excel表格,里面有1万个客户手机号。
- 输出:把这些手机号按照归属地分类,并保存到不同的Excel文件中。
分析一下,完成这个任务需要三步:
- 读取Excel文件,拿到手机号。
- 获取每个手机号的归属地。
- 按归属地分组,把分组后的数据保存到新的Excel文件中。
1和3都简单,就是获取手机号码归属地会有些困难。
花姐找了上网提供归属地查询的API,一看价格,1299果断放弃。
还好在万能的GitHub找到了完美的解决方案。
进去一看调用起来非常简单
剩下的不就手拿把掐了吗!😊
二、所需工具
实现这个任务我们需要用到以下工具:
- pandas:用于读取和处理Excel文件。
- phone:用于获取手机号归属地。
如果你没有安装这些库,可以直接用以下命令安装:
bash
pip install pandas phone
三、代码实现
1. 读取Excel文件
python
df = pd.read_excel('客户手机号.xlsx')
这里使用pandas
库的read_excel
方法读取一个名为客户手机号.xlsx
的Excel文件,并将其内容存储在DataFrame(df
)中。
2. 初始化Phone库实例
python
phone = Phone()
这里创建了Phone
类的一个实例。
3. 定义函数获取手机号归属地信息
phone.find()方法返回值为{'phone': 'shoujihaoma', 'province': '广东', 'city': '湛江', 'zip_code': '524000', 'area_code': '0759', 'phone_type': '联通'}
根据返回结果我们保留province、city和phone_type这几个字段,没有查询到的就默认未知。
python
def get_location_info(phone_number):
try:
# 获取归属地信息
location = phone.find(phone_number)
if location:
# 提取所需的字段
province = location.get('province', '未知')
city = location.get('city', '未知')
phone_type = location.get('phone_type', '未知')
return province, city, phone_type
else:
return '未知', '未知', '未知'
except Exception as e:
return '未知', '未知', '未知'
4. 提取归属地信息并添加到DataFrame
python
df[['省份', '城市', '运营商']] = df['手机号'].apply(lambda x: pd.Series(get_location_info(x)))
# 你是不是想写个循环遍历df?其实一个lambda就搞定了
- 这里使用
apply()
方法对DataFrame中的每个手机号列(df['手机号']
)应用get_location_info
函数。 lambda x: pd.Series(get_location_info(x))
这一部分确保get_location_info(x)
返回的省份、城市和运营商信息被正确地转换为DataFrame的列。每个手机号的归属地信息会填充到"省份"、"城市"和"运营商"这三列中。apply()
会按行遍历手机号列,并调用get_location_info
获取每个手机号的归属地信息。
5. 保存修改后的Excel文件
python
df.to_excel('客户手机号_归属地信息.xlsx', index=False)
- 这行代码将处理后的DataFrame保存为新的Excel文件,命名为
客户手机号_归属地信息.xlsx
。 index=False
表示不保存DataFrame的行索引(即不在Excel中保存第一列的行号)。
四、源码
话不多说,直接上代码👇:
python
import pandas as pd
from phone import Phone
# Step 1: 读取Excel文件
df = pd.read_excel('客户手机号.xlsx')
# Step 2: 初始化Phone库实例
phone = Phone()
# Step 3: 定义一个函数获取手机号归属地,并提取所需信息
def get_location_info(phone_number):
try:
# 获取归属地信息
location = phone.find(phone_number)
if location:
# 提取所需的字段
province = location.get('province', '未知')
city = location.get('city', '未知')
phone_type = location.get('phone_type', '未知')
return province, city, phone_type
else:
return '未知', '未知', '未知'
except Exception as e:
return '未知', '未知', '未知'
# Step 4: 提取归属地信息并添加到DataFrame
df[['省份', '城市', '运营商']] = df['手机号'].apply(lambda x: pd.Series(get_location_info(x)))
# Step 5: 保存修改后的Excel文件
df.to_excel('客户手机号_归属地信息.xlsx', index=False)
print("完成")
五、运行效果
运行代码后,你会在当前目录下生成客户手机号_归属地信息.xlsx
。
六、花姐的反思
写完这个程序,我忍不住感叹,Python真的是提高生产力的神器啊!😂 再次证明了程序员的存在意义------能让"重复劳动"这种事离我们远远的。如果你还在靠手动方式处理Excel数据,那真的该试试Python了。
当然,写代码的时候要注意以下几点:
- 数据库的查询速度很快,但数据量特别大时也需要优化,比如批量处理。
- 千万别忘了加异常处理(
try...except
),特别是处理用户提供的数据时,防止程序崩溃。 - 做完任务别忘了喝奶茶庆祝!🍹
七、结语
好了,今天的分享就到这里啦!希望这篇文章能给大家提供一点思路。如果你也有类似的任务,不妨试试用Python来解决,说不定还能让老板对你刮目相看呢!😂
我是花姐,一个专注于Python技术的分享者,咱们下次见!👋