Chuyển đổi chuỗi 1k thành 1000 hoặc 1.9k thành 1900

Ví dụ, khi Crawl dữ liệu từ shopee, với trường dữ liệu: Đã bán 1,1k , muốn chuyển đổi về số 1100 để lưu vào Database, bạn sẽ cần:

  • Xóa chuỗi Đã bán
  • Chuyển dấu phẩy , thành dấu chấm .
  • Chuyển chuỗi có ký tự k thành 000 (nghìn), hoặc m thành 000000 (triệu)…

Sử dụng nó ở đâu?

Trong ví dụ này, tôi sử dụng nó với ItemLoader

Trong tệp items.py

# items.py
import scrapy
from scrapy.loader import ItemLoader
from itemloaders.processors import TakeFirst, MapCompose
from w3lib.html import remove_tags

# # Xóa Đã bán
def remove_daban(value):
    return value.replace('Đã bán ', '')
# Thay dấu , thành dấu .
def replace_comma(value):
    return value.replace(',', '.')

# chuyển k to 000. Lưu ý chữ hoa và chữ thường
def value_to_float(x):
    if type(x) == float or type(x) == int:
        return x
    if 'k' in x:
        if len(x) > 1:
            return float(x.replace('k', '')) * 1000
        return 1000.0
    if 'M' in x:
        if len(x) > 1:
            return float(x.replace('M', '')) * 1000000
        return 1000000.0
    if 'B' in x:
        return float(x.replace('B', '')) * 1000000000
    return x

class ShopeeProduct(scrapy.Item):
   # ... một số items khác
    sold = scrapy.Field(
        input_processor = MapCompose(remove_tags, remove_daban, replace_comma, value_to_float), 
        output_processor = TakeFirst()
        )

Dữ liệu trước và sau khi chuyển đổi:

# Trước khi chuyển đổi
price,sale_price,sold,title
209000,418000,702,Bộ Thể Thao Nam Chất Nỉ Co Giãn Thời Trang Cao Cấp ZERO
169000,298000,1.1k,Quần Thể Thao Nam Trẻ Trung Thời Trang ZERO
144000,300000,3.5k,Bộ Mặc Nhà Thể Thao Nam Mùa Hè Mát Mẻ Cao Cấp Zero 4 Màu
190000,358000,1.4k,Bộ Nỉ Nam Thể Thao Thiết Kế Khỏe Khoắn Thời Trang VICERO
109000,238000,735,Áo Len Nam Mỏng Giữ Nhiệt Phong Cách Trẻ Trung Lịch Lãm 5 Màu Trơn Thời Trang VICERO

# Sau khi chuyển đổi
price,sale_price,sold,title
209000,418000,702,Bộ Thể Thao Nam Chất Nỉ Co Giãn Thời Trang Cao Cấp ZERO
169000,298000,1100.0,Quần Thể Thao Nam Trẻ Trung Thời Trang ZERO
144000,300000,3500.0,Bộ Mặc Nhà Thể Thao Nam Mùa Hè Mát Mẻ Cao Cấp Zero 4 Màu
190000,358000,1400.0,Bộ Nỉ Nam Thể Thao Thiết Kế Khỏe Khoắn Thời Trang VICERO
109000,238000,735,Áo Len Nam Mỏng Giữ Nhiệt Phong Cách Trẻ Trung Lịch Lãm 5 Màu Trơn Thời Trang VICERO

Nguồn tham khảo: python - Convert the string 2.90K to 2900 or 5.2M to 5200000 in pandas dataframe - Stack Overflow