我正在处理一个项目,其中我有一个由两列(字符串、字符串计数)组成的pyspark数据帧,这两列分别是字符串和大整数.数据集是脏的,因此某些单词附加了非字母字符(例如"Date"、"_Date"、"!Date"和"Date,"都是单独的项,但应该只是"Date")

print(dirty_df.schema)
output---> StructType([StructField('count', LongType(), True), StructField('word', StringType(), True)])
dirty_df.show()
+------+------+
| count|  word|
+------+------+
|32375 |  date|
|359   | _date|
|306   | !date|
|213   | date,|
|209   |  snap|
|204   | ^snap|
|107   | +snap|
|12    | snap?|

我需要减少数据帧,使Date、_Date、!Date和Date都只是‘Date’,并更新它们的计数以匹配.问题是:我需要避免使用类似的词,比如‘Dates’,‘Date’,‘Date’,‘Todate’等等.

Goal

+------+------+
| count|  word|
+------+------+
|33253 |  date|
|532   |  snap|

你觉得我该怎么处理这件事?

推荐答案

使用regexp_replace函数并替换所有特殊字符([^a-zA-Z] replace all characters other than alphabets).

100

df = spark.createDataFrame([(32375,'date'),(359,'_date'),(306,'[date'),(213,'date]'),(209,'snap'),(204,'_snap'),(107,'[snap'),(12,'snap]')],['count','word'])
df.withColumn("word",regexp_replace(col("word"),"[^a-zA-Z]","")).groupBy("word").agg(sum(col("count")).alias("count")).show(10,False)
#+----+-----+
#|word|count|
#+----+-----+
#|date|33253|
#|snap|532  |
#+----+-----+

100

如果只想替换特定字符,则使用100函数

df.withColumn("word",expr('translate(word,"(_|]|[)","")')).groupBy("word").agg(sum(col("count")).alias("count")).show(10,False)

#+----+-----+
#|word|count|
#+----+-----+
#|date|33253|
#|snap|532  |
#+----+-----+

Python相关问答推荐

更改Seaborn条形图中的x轴日期时间限制

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

如果索引不存在,pandas系列将通过索引获取值,并填充值

计算所有前面行(当前行)中列的值

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

如何处理嵌套的SON?

Django管理面板显示字段最大长度而不是字段名称

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

从numpy数组和参数创建收件箱

SQLAlchemy Like ALL ORM analog

迭代嵌套字典的值

如何在Python中找到线性依赖mod 2

UNIQUE约束失败:customuser. username

在Python中计算连续天数

合并与拼接并举

Polars Group by描述扩展

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

如何合并具有相同元素的 torch 矩阵的行?

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

如何获取包含`try`外部堆栈的`__traceback__`属性的异常