多维表格我就想删除重复项怎么那么难啊

用ai写了半天的Python脚本,都不能通过电话去重数据,怎么弄

import pandas as pd

import re

try:

# 读取数据,不指定 field 参数,自动包含 _rid

df = dbt(sheet_name="Sheet1")

except Exception as e:

print(f"数据读取失败: {str(e)}")

exit()

# 数据验证

if df.empty:

print("警告:未获取到任何数据")

exit()

# 检查 _rid 是否存在

if '_rid' not in df.index.names:

print("错误:未获取到记录ID(_rid),请检查字段设置")

exit()

# 数据预处理

try:

# 过滤无效电话(中国大陆手机号格式)

phone_pattern = re.compile(r'^1[3-9]\d{9}$')

valid_mask = df['电话'].apply(lambda x: phone_pattern.match(str(x)) is not None)

valid_df = df[valid_mask]

if len(valid_df) < len(df):

print(f"警告:过滤了 {len(df) - len(valid_df)} 个无效电话")

df = valid_df

except Exception as e:

print(f"数据处理错误: {str(e)}")

exit()

# 数据处理

try:

# 按最后修改时间降序排序

df_sorted = df.sort_values('最后修改时间', ascending=False)

# 按电话去重,保留最新记录(使用 _rid 作为唯一标识)

df_deduplicated = df_sorted.drop_duplicates(subset='电话', keep='first')

# 更新状态字段

df_deduplicated['状态'] = '待岗'

# 仅保留状态字段和 _rid 作为索引

df_deduplicated = df_deduplicated[['状态']]

except Exception as e:

print(f"数据处理错误: {str(e)}")

exit()

# 数据回写前验证

print("即将更新的数据预览:")

print(df_deduplicated.head())

print("数据形状:", df_deduplicated.shape)

# 数据回写

try:

update_dbt(df_deduplicated)

print(f"成功更新 {len(df_deduplicated)} 条记录")

# 手动测试单条更新

sample_rid = df_deduplicated.index[0]

print(f"手动测试更新 _rid 为 {sample_rid} 的记录")

update_dbt(pd.DataFrame({"状态": ["测试成功"]}, index=[sample_rid]))

print("单条测试成功,请检查多维表数据")

except Exception as e:

print(f"数据回写失败: {str(e)}")

exit()

广东省
浏览 89
收藏
3
分享
3 +1
9
+1
全部评论 9
 
围观,学习
· 河南省
回复
 
wils

创作者俱乐部成员

试了一下 d = dbt(sheet_name='数据表(4)').drop_duplicates(subset='电话') delete_dbt(sheet_name='数据表(4)') insert_dbt(sheet_name='数据表(4)', data=d)
· 广东省
回复
wils

创作者俱乐部成员

大概意思是: dbt获取数据表 drop_duplicates去重 delete_dbt清空表 insert_dbt把去重后的d写入空表
· 广东省
回复
 
或者,增加一个公式字段判断是否重复项 然后,筛选出判断为重复的记录,最后手工删除
· 广东省
回复
谢谢你的建议,在线表格体验会更好一些
· 广东省
回复
 
我有一个js的脚本,亲测可行
· 上海
回复
谢谢回复
· 广东省
回复