490 lines
18 KiB
Plaintext
490 lines
18 KiB
Plaintext
{
|
||
"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
|
||
}
|