Python 数据处理- 给多个不同筛选条件分别打标签

需要对一个大概有5、6万行的公司(公司名没有重复,是唯一识别的key)的工商信息数据,包括企业地址、电话等进行整理,方便后续整理出公司的特征标签进一步去建模和分析。
我的解答思路和尝试过的方法(见附件示例):
  • 如果用excel,就是用pivot table ,对应筛选不同维度下多于一家公司的情况,如,某个电话号码下,有多于一家公司,就对这个电话手动打上标签—”一个电话号码有多家公司“、诸如此类,同一个地址下有多家公司就是”同一企业地址有多家公司“

img

样本数据表:

公司名称电话邮箱企业地址手动标签(额外根据Pivot标的不是源数据)
北京X1餐饮管理有限公司15810v999290486v4@qq.com北京市海淀区Xt平房同一地址多家公司
天津市南星区xx2餐饮管理服务部15810v99290486v4@qq.com天津市南开区ABCDEFG 731
北京X3有限公司777779999007xbtyb7@qq.com北京市顺义区&同一电话有多家公司共用
北京星餐饮发展有限公司0108*98591b90865b0@163.com北京市朝阳区X2号
北京风餐饮管理有限公司135&&199990135&&199990@qq.com北京市海淀区Xt平房同一地址多家公司
青岛肉餐饮有限公司77777999900青岛市1888号同一电话有多家公司共用,同一地址多家公司
青岛汪珠江路分公司135111199990None青岛市1888号同一地址多家公司
深圳市坪山区好大一家酒楼NoneNone深圳市坪山区aa号101同一地址多家公司
深圳热热闹闹酒家有限公司0755-9990055323634590909@qq.com深圳市坪山区aa号101同一电话有多家公司共用
深圳市味*vba餐饮管理有限公司1v90865v01v90865v0 @163.com深圳市龙岗区公园401-COCOPAR
深圳市品鉴赏好物餐饮管理有限公司NoneNone深圳市南山区流溪河大院同一地址多家公司
深圳市来又来不走餐饮有限公司NoneNone深圳市南山区流溪河大院同一地址多家公司
深圳市福田区俊*vnb酒楼NoneNone深圳市福田区南方公园同一地址多家公司
深圳市聚好价餐饮有限公司0755-9990055323227v876@qq.com深圳市福田区南方公园同一地址多家公司,同一电话有多家公司共用
深圳市巨便宜酒楼有限公司NoneNone深圳市光明区奉还工业大门
因为有几万行,excel操作也很繁琐,后面还要重复做好几次的抽样分析,所以希望求一个python的处理方法,便于后续批量操作,要求:各列分别分析,标签(即”同一电话多家公司共用“,分别生成单独的列),最后所有列统一到一个表格输出

实际上,一楼的回复可以更简单


import pandas as pd

df=pd.read_excel('sample.xlsx')
#如果原数据有none,就把它替换成缺失(如果是题主仅在示例中加的,那就忽略该代码)
df.replace('None',float('nan'),inplace=True)
df['phone_label']=df.groupby('电话')['公司名称'].transform(lambda x:'同一电话有多家公司共用' if x.count()>1 else '')
df['address_label']=df.groupby('企业地址')['公司名称'].transform(lambda x:'同一地址多家公司' if x.count()>1 else '')

df.to_excel('sample.xlsx',index=False)

这里生成的excel表仅仅给多个共用的打标签,否则单个的就不打了,为空白

用pandas最合适了

为了整理这个工商信息数据,需要先加载数据,接下来用数据处理方法(例如pandas)处理数据,并通过代码整理出有用的信息,最后存储到dataFrame中。

import pandas as pd

# 加载数据
data = pd.read_csv("company_data.csv")

# 只保留需要的列
data = data[["company_name", "address", "phone"]]

# 去掉重复行
data.drop_duplicates(subset="company_name", keep="first", inplace=True)

# 去掉空值
data.dropna(subset=["company_name", "address", "phone"], inplace=True)

# 保存到dataFrame中
data.to_csv("company_data_clean.csv", index=False)


这是一个简单的代码示例,根据实际情况,还可以增加更多的数据处理步骤。

您好,根据您描述的问题,需要对几万条公司数据的多个数据列进行筛选打标签等操作,建议不要使用pivot,处理起来会比较麻烦,你可以使用python中专门做数据处理的库pandas。使用这个库可以很方便的做数据的批量处理,尤其是excel这样的表格数据。
授人以鱼不如授人以渔,给您提供以下学习资料,相信您看过后能够轻松解决您的问题
Pandas处理Excel超简单:
https://blog.csdn.net/m0_59236127/article/details/122712241
Pandas(七)--分组、合并和连接:
https://blog.csdn.net/weixin_43145427/article/details/124526872
DataFrame的合并、分组聚合与数据透视表:
https://blog.csdn.net/Mart_inn/article/details/122216010

这是一个较为复杂的问题,在没有详细的数据格式和分析需求的情况下,很难提供具体的代码实现。

建议把数据导入到数据库中,比如 SQL Server、MySQL 等。然后通过使用 SQL 语句来进行数据分析和清理。

以下是一些 SQL 语句的示例,以帮助您提取数据:

查询有多个公司使用同一个电话号码的情况:
sql
Copy code
SELECT telephone, count()
FROM company_info
GROUP BY telephone
HAVING count(
) > 1;
查询有多个公司使用同一个地址的情况:
sql
Copy code
SELECT address, count()
FROM company_info
GROUP BY address
HAVING count(
) > 1;
通过使用上述语句,可以找到有重复的电话和地址,并进行手动标记。

如果想更详细地了解 SQL,可以学习一些相关的课程和教程,或查询相关的书籍。

谢谢回复!确实很简洁,而且输出结果不需要额外整理。

在 Python 中,您可以使用 Pandas 库来完成此任务。Pandas 是用于处理和分析数据的常用库。您可以使用 Pandas 的诸如 df[df["column_name"] condition value] 的语法对数据进行筛选,并创建一个新的列来存储标签。

以下是一个简单的示例:

import pandas as pd

# create a sample dataframe
df = pd.DataFrame({
    "A": [1, 2, 3, 4, 5],
    "B": [5, 4, 3, 2, 1],
    "C": [10, 20, 30, 40, 50]
})

# condition 1: if A is greater than 3, label is 'high'
df['label1'] = np.where(df['A'] > 3, 'high', 'low')

# condition 2: if B is less than or equal to 2, label is 'critical'
df['label2'] = np.where(df['B'] <= 2, 'critical', 'normal')

# condition 3: if C is between 20 and 40, label is 'medium'
df['label3'] = np.where((df['C'] >= 20) & (df['C'] <= 40), 'medium', 'other')

print(df)
这样,您就可以创建多个筛选条件并对数据分别打标签。
这种方法的确可以解决问题,但是当数据量很大的时候,这个方法就不太可行了。你可以使用代码来完成这项工作,比如使用Python进行数据处理,使用pandas库进行数据分析和处理,使用数据清洗算法,例如正则表达式、字符串匹配算法等,最后将整理出来的数据保存到数据库或者文件系统中。希望这些建议对你有帮助。