Files
F6--/张阳脚本/工具/emoji严格处理.ipynb
2026-05-18 13:45:58 +08:00

490 lines
18 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2026-04-22T07:31:42.910929700Z",
"start_time": "2026-04-22T07:31:37.243473300Z"
}
},
"source": [
"import pandas as pd\n",
"import re\n",
"import sys\n",
"\n",
"def remove_4byte_chars(text):\n",
" \"\"\"\n",
" 移除字符串中的 4 字节 UTF-8 字符(如 Emoji、部分生僻字)\n",
" 这些字符的 Unicode 码点范围是 U+10000 到 U+10FFFF\n",
" \"\"\"\n",
" if isinstance(text, str):\n",
" # 使用正则表达式匹配并移除 4 字节字符(即 Unicode 超出 BMP 平面)\n",
" cleaned = re.sub(r'[\\U00010000-\\U0010FFFF]', '', text)\n",
" return cleaned\n",
" return text\n",
"\n",
"def sanitize_dataframe(df):\n",
" \"\"\"\n",
" 对 DataFrame 中所有字符串类型的列进行清洗\n",
" \"\"\"\n",
" for col in df.columns:\n",
" if df[col].dtype == 'object': # 通常是字符串列\n",
" df[col] = df[col].apply(remove_4byte_chars)\n",
" return df\n",
"\n",
"# 示例:读取 Excel 文件\n",
"def process_excel_file(file_path):\n",
" # df = pd.read_excel(file_path, engine='openpyxl') # 支持 .xlsx\n",
" df = pd.read_excel(file_path, engine='xlrd') # 支持 .xlsx\n",
" print(\"原始数据:\")\n",
" print(df.head())\n",
"\n",
" # 清洗数据\n",
" df_cleaned = sanitize_dataframe(df.copy())\n",
"\n",
" print(\"\\n清洗后数据(已移除 4 字节字符):\")\n",
" print(df_cleaned.head())\n",
"\n",
" # 保存或返回清洗后的数据\n",
" df_cleaned.to_excel('cleaned_output.xlsx', index=False)\n",
" print(\"\\n已保存清洗后的文件:cleaned_output.xlsx\")\n",
" return df_cleaned\n",
"\n",
"# 示例:读取 CSV 文件\n",
"def process_csv_file(file_path):\n",
" df = pd.read_csv(file_path, encoding='utf-8') # 假设是 UTF-8 编码\n",
" print(\"原始数据:\")\n",
" print(df.head())\n",
"\n",
" df_cleaned = sanitize_dataframe(df.copy())\n",
"\n",
" print(\"\\n清洗后数据:\")\n",
" print(df_cleaned.head())\n",
"\n",
" df_cleaned.to_csv('cleaned_output.csv', index=False, encoding='utf-8')\n",
" print(\"\\n已保存清洗后的文件:cleaned_output.csv\")\n",
" return df_cleaned\n",
"\n",
"file_path = fr\"C:\\Users\\hp_z66\\OneDrive\\Desktop\\钉钉文件\\客户车辆信息老六_可导入.xls\"\n",
"process_excel_file(file_path)"
],
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"原始数据:\n",
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 发动机号 \\\n",
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN NaN \n",
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN NaN \n",
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN NaN \n",
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN NaN \n",
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN NaN \n",
"\n",
" ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
"0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"1 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"2 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"3 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
"[5 rows x 37 columns]\n",
"\n",
"清洗后数据(已移除 4 字节字符):\n",
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 发动机号 \\\n",
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN NaN \n",
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN NaN \n",
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN NaN \n",
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN NaN \n",
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN NaN \n",
"\n",
" ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
"0 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"1 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"2 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"3 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"4 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
"[5 rows x 37 columns]\n",
"\n",
"已保存清洗后的文件:cleaned_output.xlsx\n"
]
},
{
"data": {
"text/plain": [
" 客户姓名 性别 车牌号 手机号码 标签 VIN码 车身颜色 备注 车辆所有人 \\\n",
"0 1 NaN 豫S38065 13174646666 NaN NaN NaN NaN NaN \n",
"1 先生 NaN 黑A92RS8 15004617481 NaN LMGAA1C51F1096393 NaN NaN NaN \n",
"2 先生 NaN 黑F05145 15244670275 NaN LSJW56761KG020310 NaN NaN NaN \n",
"3 先生 NaN 黑AV101M 18904650318 NaN LFV3A23C6G3051709 NaN NaN NaN \n",
"4 1 NaN 黑A1G3U7 13069966234 NaN NaN NaN NaN NaN \n",
"... ... .. ... ... .. ... ... .. ... \n",
"9917 陈双 NaN 黑AQ293H 13019712562 NaN LSYBCAAA4CW070101 NaN NaN NaN \n",
"9918 奇瑞 NaN 黑AG21X5 18346069680 NaN LS5A3DBE5GA136962 NaN NaN NaN \n",
"9919 奇瑞 NaN 黑A8DC02 18346069680 NaN LVVDA11A3AD070555 NaN NaN NaN \n",
"9920 戴洪太 NaN 黑A579B1 18346262816 NaN LSVGX46R7E2049499 NaN NaN NaN \n",
"9921 高先生 NaN 黑AH2R02 13796072678 NaN LGBP12E04CY105879 NaN NaN NaN \n",
"\n",
" 发动机号 ... 会员号 可用积分 累计获取积分 专属门店 专属顾问 客户推广员工 注册日期 发证日期 车辆来源 车辆推广员工 \n",
"0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"1 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"2 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"3 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"4 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"... ... ... .. ... ... ... ... ... ... ... ... ... \n",
"9917 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"9918 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"9919 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"9920 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"9921 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n",
"\n",
"[9922 rows x 37 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>客户姓名</th>\n",
" <th>性别</th>\n",
" <th>车牌号</th>\n",
" <th>手机号码</th>\n",
" <th>标签</th>\n",
" <th>VIN码</th>\n",
" <th>车身颜色</th>\n",
" <th>备注</th>\n",
" <th>车辆所有人</th>\n",
" <th>发动机号</th>\n",
" <th>...</th>\n",
" <th>会员号</th>\n",
" <th>可用积分</th>\n",
" <th>累计获取积分</th>\n",
" <th>专属门店</th>\n",
" <th>专属顾问</th>\n",
" <th>客户推广员工</th>\n",
" <th>注册日期</th>\n",
" <th>发证日期</th>\n",
" <th>车辆来源</th>\n",
" <th>车辆推广员工</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>豫S38065</td>\n",
" <td>13174646666</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>先生</td>\n",
" <td>NaN</td>\n",
" <td>黑A92RS8</td>\n",
" <td>15004617481</td>\n",
" <td>NaN</td>\n",
" <td>LMGAA1C51F1096393</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>先生</td>\n",
" <td>NaN</td>\n",
" <td>黑F05145</td>\n",
" <td>15244670275</td>\n",
" <td>NaN</td>\n",
" <td>LSJW56761KG020310</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>先生</td>\n",
" <td>NaN</td>\n",
" <td>黑AV101M</td>\n",
" <td>18904650318</td>\n",
" <td>NaN</td>\n",
" <td>LFV3A23C6G3051709</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>黑A1G3U7</td>\n",
" <td>13069966234</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9917</th>\n",
" <td>陈双</td>\n",
" <td>NaN</td>\n",
" <td>黑AQ293H</td>\n",
" <td>13019712562</td>\n",
" <td>NaN</td>\n",
" <td>LSYBCAAA4CW070101</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9918</th>\n",
" <td>奇瑞</td>\n",
" <td>NaN</td>\n",
" <td>黑AG21X5</td>\n",
" <td>18346069680</td>\n",
" <td>NaN</td>\n",
" <td>LS5A3DBE5GA136962</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9919</th>\n",
" <td>奇瑞</td>\n",
" <td>NaN</td>\n",
" <td>黑A8DC02</td>\n",
" <td>18346069680</td>\n",
" <td>NaN</td>\n",
" <td>LVVDA11A3AD070555</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9920</th>\n",
" <td>戴洪太</td>\n",
" <td>NaN</td>\n",
" <td>黑A579B1</td>\n",
" <td>18346262816</td>\n",
" <td>NaN</td>\n",
" <td>LSVGX46R7E2049499</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9921</th>\n",
" <td>高先生</td>\n",
" <td>NaN</td>\n",
" <td>黑AH2R02</td>\n",
" <td>13796072678</td>\n",
" <td>NaN</td>\n",
" <td>LGBP12E04CY105879</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>...</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>9922 rows × 37 columns</p>\n",
"</div>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 2
}
],
"metadata": {
"kernelspec": {
"display_name": "F6+宜搭+其它",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}