Làm thế nào để bạn lọc số không trong python?

Trong bài viết này, chúng ta sẽ tìm hiểu cách xóa các ký tự trừ chữ số khỏi một chuỗi trong Python

Cách tiếp cận đầu tiên là sử dụng câu lệnh if trong vòng lặp for và nối chúng bằng phương thức join[]. Ta sẽ lặp lại chuỗi bằng vòng lặp for sau đó sẽ kiểm tra từng ký tự có phải là chữ số hay không bằng câu lệnh if, nếu là chữ số thì chuyển sang ký tự tiếp theo, nếu không thì thay thế ký tự đó

Để lặp lại nhiều lần thông qua một chuỗi, hãy sử dụng vòng lặp for. Chức năng này giống như một phương thức lặp được thấy trong các ngôn ngữ lập trình hướng đối tượng khác và ít giống với từ khóa for được tìm thấy trong các ngôn ngữ lập trình khác. Vòng lặp for cho phép chúng ta chạy một loạt các hướng dẫn một lần cho từng phần tử của danh sách, bộ dữ liệu, bộ, v.v.

Ví dụ

Trong ví dụ dưới đây, chúng tôi đang lấy một chuỗi làm đầu vào và chúng tôi sẽ xóa tất cả các ký tự không phải là chữ số bằng cách sử dụng biểu thức chính quy và in chuỗi kết quả −

Vấn đề. Trong Spark, tôi có một cột chuỗi trên DataFrame và muốn kiểm tra xem cột chuỗi này có tất cả hoặc bất kỳ giá trị số nào không, tự hỏi liệu có bất kỳ hàm nào tương tự như hàm isNumeric trong các công cụ/ngôn ngữ khác không

Dung dịch. Kiểm tra cột chuỗi có tất cả các giá trị số

Thật không may, Spark không có hàm isNumeric[] do đó bạn cần sử dụng các hàm hiện có để kiểm tra xem cột chuỗi có tất cả hoặc bất kỳ giá trị số nào không. Bạn có thể muốn viết Spark UDF cho các tình huống như thế này nhưng không nên sử dụng UDF vì chúng không hoạt động tốt

Hãy tạo một DataFrame đơn giản với các cột số và chữ số cho ví dụ của chúng tôi


import spark.implicits._
val data = Seq[[1,"123456","123456"],
  [2,"3456234","ABCD12345"],[3,"48973456","ABCDEFGH"]]
val df = data.toDF["id","all_numeric","alphanumeric"]
df.show[]

//+---+-----------+------------+
//| id|all_numeric|alphanumeric|
//+---+-----------+------------+
//|  1|     123456|      123456|
//|  2|    3456234|   ABCD12345|
//|  3|   48973456|    ABCDEFGH|
//+---+-----------+------------+

1. Cột kiểm tra tia lửa có giá trị số

Ví dụ dưới đây tạo một cột Boolean mới


import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+
2, cột này chứa

import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+
3 cho giá trị số và

import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+
0 cho giá trị không phải là số. Để làm được điều này mình đã thực hiện ép kiểu cột từ cột string sang int và kiểm tra kết quả ép kiểu là

import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+
1. hàm cast[] trả về null khi không thể truyền sang một loại cụ thể


import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+

2. Lọc các hàng chỉ có các giá trị số trong một cột

Bạn có thể sử dụng cách tiếp cận tương tự để lọc các hàng chỉ có giá trị số trên cột chuỗi. Ví dụ dưới đây kiểm tra các giá trị số trong cột


import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+
2 và trả về các bản ghi có giá trị số


//Filter rows that has numeric value on column
import org.apache.spark.sql.functions.{col}
df.filter[col["alphanumeric"]
    .cast["int"].isNotNull
 ].show[]

//+---+-----------+------------+
//| id|all_numeric|alphanumeric|
//+---+-----------+------------+
//|  1|     123456|      123456|
//+---+-----------+------------+

Ngoài ra, bạn có thể sử dụng hàm


import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+
3 của lớp Cột để lọc các hàng có giá trị số trên một cột


df.filter[col["alphanumeric"]
    .rlike["^[0-9]*$"]
  ].show[]

Và, bạn cũng có thể sử dụng mã bên dưới. Điều này cũng trả về cùng một đầu ra như trên

________số 8

3. Cột chuỗi kiểm tra PySpark có tất cả các giá trị số

Ví dụ PySpark để kiểm tra cột chuỗi DataFrame có tất cả các giá trị số


spark = SparkSession.builder.appName['SparkByExamples.com'].getOrCreate[]

data = [[1,"123456","123456"],
  [2,"3456234","ABCD12345"],[3,"48973456","ABCDEFGH"]]
df = spark.createDataFrame[data = data, schema = ["id","all_numeric","alphanumeric"]]
df.show[]

from pyspark.sql.functions import col
df.select[col["all_numeric"],
          col["all_numeric"].cast["int"].isNotNull[].alias["Value "]
  ].show[]

4. Hàng Bộ lọc PySpark chỉ có Giá trị Số

Lọc các hàng DataFrame chỉ có giá trị số trên PySpark DataFrame


import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+
0

5. Sử dụng biểu thức truy vấn SQL


import org.apache.spark.sql.functions.{col}
df.select[col["all_numeric"],
    col["all_numeric"]
      .cast["int"].isNotNull.alias["Value "]
  ].show[]

//+-----------+------+
//|all_numeric|Value |
//+-----------+------+
//|     123456|  true|
//|    3456234|  true|
//|   48973456|  true|
//+-----------+------+
1

Phần kết luận

Trong bài viết này, bạn đã học các ví dụ về Spark * PySpark về cách kiểm tra xem cột chuỗi DataFrame có giá trị số hay không và cách lọc các hàng chỉ có giá trị số

Chủ Đề