วิธีแก้ไขใน 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’ ได้
วิธีแก้ไข: ข้อผิดพลาดประเภท: สตริงที่คาดหวังหรือวัตถุไบต์

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *