我有一个快餐连锁店的列表(超过300行)。在我的数据中,每个快餐连锁店的名称可能是McDonald's, Mcdonald's 100, etc.
,我不能测试是否完全相等,因为那样我就会错过麦当劳100。我想测试并查看每个快餐连锁店是否出现在我的表中我的列中的任何位置。
数据帧:
ID Name
1 Mcdonad's
2 Mcdonald's 100
3 Subway 600
餐厅列表:
["Mcdonald's", "Subway", etc.]
我如何排除我的数据框中不包括餐厅列表中的餐厅的所有内容?
发布于 2021-10-13 21:17:57
您可以使用contains检查一个字符串是否与另一个字符串的一部分匹配。这不包括像Mcdonad's
这样的拼写错误,但它可以处理前导符号和尾随符号。对于模糊匹配,您可以查看levenshtein距离。
from pyspark.sql.types import StringType
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
fast_food_chains = ["Mcdonald's", "Subway", ]
# create pyspark df from list
df_chains = spark \
.createDataFrame(fast_food_chains, StringType()) \
.withColumnRenamed('value', 'chain_name')
df = spark.createDataFrame(
[
(1, "Mcdonad's"),
(2, "Mcdonald's 100"),
(3, "Subway 600")
],
["id", "chain_name"]
)
# join dfs using contains
df \
.join(df_chains, df.chain_name.contains(df_chains.chain_name)) \
.show()
+---+--------------+----------+
| id| chain_name|chain_name|
+---+--------------+----------+
| 2|Mcdonald's 100|Mcdonald's|
| 3| Subway 600| Subway|
+---+--------------+----------+
https://stackoverflow.com/questions/69562029
复制相似问题