วิธีแก้ไขใน pandas: ไม่สามารถแปลงสตริงเป็นแบบลอยได้
ข้อผิดพลาดทั่วไปที่คุณอาจพบเมื่อใช้แพนด้าคือ:
ValueError : could not convert string to float: '$400.42'
ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคุณพยายามแปลงสตริงให้ลอยอยู่ในนุ่น เมื่อสตริงประกอบด้วยอย่างน้อยหนึ่งอย่างต่อไปนี้:
- ช่องว่าง
- จุลภาค
- อักขระพิเศษ
เมื่อสิ่งนี้เกิดขึ้น คุณต้องลบอักขระเหล่านี้ออกจากสตริงก่อนจึงจะแปลงเป็นทศนิยม
ตัวอย่างต่อไปนี้แสดงวิธีการแก้ไขข้อผิดพลาดนี้ในทางปฏิบัติ
วิธีการทำซ้ำข้อผิดพลาด
สมมติว่าเรามี DataFrame แพนด้าดังต่อไปนี้:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'B', 'C', 'D'], ' revenue ': ['$400.42', '$100.18', '$243.75', '$194.22']}) #view DataFrame print (df) store revenue 0 A $400.42 1 B $100.18 2 C $243.75 3D $194.22 #view data type of each column print ( df.dtypes ) store object revenue object dtype:object
ตอนนี้ สมมติว่าเรากำลังพยายามแปลงคอลัมน์ รายได้ จากสตริงเป็นแบบทศนิยม:
#attempt to convert 'revenue' from string to float
df[' revenue '] = df[' revenue ']. astype (float)
ValueError : could not convert string to float: '$400.42'
เราได้รับข้อผิดพลาดเนื่องจากคอลัมน์ รายได้ มีเครื่องหมายดอลลาร์อยู่ในสตริง
วิธีการแก้ไขข้อผิดพลาด
วิธีแก้ไขข้อผิดพลาดนี้คือการใช้ฟังก์ชัน แทนที่() เพื่อแทนที่เครื่องหมายดอลลาร์ในคอลัมน์ รายได้ โดยไม่มีสิ่งใดเลยก่อนดำเนินการแปลง:
#convert revenue column to float
df[' revenue '] = df[' revenue ']. apply ( lambda x: float(x. split ()[ 0 ]. replace (' $ ', '')))
#view updated DataFrame
print (df)
store revenue
0 to 400.42
1 B 100.18
2 C 243.75
3 D 194.22
#view data type of each column
print ( df.dtypes )
store object
income float64
dtype:object
โปรดทราบว่าเราสามารถแปลงคอลัมน์ รายได้ จากสตริงเป็นแบบทศนิยมและเราไม่ได้รับข้อผิดพลาดใดๆ เนื่องจากเราลบเครื่องหมายดอลลาร์ออกก่อนที่จะทำการแปลง
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่นๆ ใน Python:
วิธีแก้ไขใน Python: ไม่สามารถเรียกวัตถุ ‘numpy.ndarray’ ได้
วิธีแก้ไข: TypeError: ไม่สามารถเรียกวัตถุ ‘numpy.float64’ ได้
วิธีแก้ไข: ข้อผิดพลาดประเภท: สตริงที่คาดหวังหรือวัตถุไบต์