Home / Example - Weird NaN Values

Example - Weird NaN Values

You are not logged in.

If you are a current student, please Log In for full access to this page.
import pandas as pd
df = pd.read_csv("./usage_63_apr.csv")
df.head()
ID YEAR MONTH CIRCUIT_NO APP_CODE REGION VILLAGE SUBDISTRICT DISTRICT PROVINCE AP_NAME IP_ADDRESS UPLOAD DOWNLOAD NUM_USERS NUM_DEVICES
0 1 2563 ����¹ 7561d9000 SR664610 �.4 ���� 2 ��ͧ��ҡ ����ѹ�ҹ��� ����ѹ�� ��к�� KBI-SR664610 172.18.168.2 2,641.02 23,189.19 77.0 25.0
1 2 2563 ����¹ 4485d9000 SR711371 �.2 ���� 13 ��ҹ������ ��ҹ�͡ �ѵ���� ������� CPM-SR711371 172.16.140.2 15,079.66 320,717.60 1187.0 80.0
2 3 2563 ����¹ 4485d9001 SR711374 �.2 ���� 17 ��ҹ⹹�ͧ ��ҹ�͡ �ѵ���� ������� CPM-SR711374 172.16.140.10 5,617.27 95,917.28 729.0 88.0
3 4 2563 ����¹ 4486d9000 SR711628 �.2 ���� 1 ྪ� ��ҹྪ� ������ ������� CPM-SR711628 172.16.140.50 13,491.77 281,059.85 1086.0 190.0
4 5 2563 ����¹ 4486d9001 SR711630 �.2 ���� 8 ྪ��� ��ҹྪ� ������ ������� CPM-SR711630 172.16.140.58 3,040.24 53,778.04 968.0 239.0
df = pd.read_csv("./usage_63_apr.csv", encoding="ISO-8859-11")
df.head()
ID YEAR MONTH CIRCUIT_NO APP_CODE REGION VILLAGE SUBDISTRICT DISTRICT PROVINCE AP_NAME IP_ADDRESS UPLOAD DOWNLOAD NUM_USERS NUM_DEVICES
0 1 2563 เมษายน 7561d9000 SR664610 ภ.4 หมู่ 2 คลองหมาก เกาะลันตาน้อย เกาะลันตา กระบี่ KBI-SR664610 172.18.168.2 2,641.02 23,189.19 77.0 25.0
1 2 2563 เมษายน 4485d9000 SR711371 ภ.2 หมู่ 13 บ้านมะเกลือ บ้านกอก จัตุรัส ชัยภูมิ CPM-SR711371 172.16.140.2 15,079.66 320,717.60 1187.0 80.0
2 3 2563 เมษายน 4485d9001 SR711374 ภ.2 หมู่ 17 บ้านโนนทอง บ้านกอก จัตุรัส ชัยภูมิ CPM-SR711374 172.16.140.10 5,617.27 95,917.28 729.0 88.0
3 4 2563 เมษายน 4486d9000 SR711628 ภ.2 หมู่ 1 เพชร บ้านเพชร ภูเขียว ชัยภูมิ CPM-SR711628 172.16.140.50 13,491.77 281,059.85 1086.0 190.0
4 5 2563 เมษายน 4486d9001 SR711630 ภ.2 หมู่ 8 เพชรใต้ บ้านเพชร ภูเขียว ชัยภูมิ CPM-SR711630 172.16.140.58 3,040.24 53,778.04 968.0 239.0
df = pd.read_csv("./usage_63_apr.csv", encoding="ISO-8859-11", thousands=",")
df.head()
ID YEAR MONTH CIRCUIT_NO APP_CODE REGION VILLAGE SUBDISTRICT DISTRICT PROVINCE AP_NAME IP_ADDRESS UPLOAD DOWNLOAD NUM_USERS NUM_DEVICES
0 1 2563 เมษายน 7561d9000 SR664610 ภ.4 หมู่ 2 คลองหมาก เกาะลันตาน้อย เกาะลันตา กระบี่ KBI-SR664610 172.18.168.2 2,641.02 23,189.19 77.0 25.0
1 2 2563 เมษายน 4485d9000 SR711371 ภ.2 หมู่ 13 บ้านมะเกลือ บ้านกอก จัตุรัส ชัยภูมิ CPM-SR711371 172.16.140.2 15,079.66 320,717.60 1187.0 80.0
2 3 2563 เมษายน 4485d9001 SR711374 ภ.2 หมู่ 17 บ้านโนนทอง บ้านกอก จัตุรัส ชัยภูมิ CPM-SR711374 172.16.140.10 5,617.27 95,917.28 729.0 88.0
3 4 2563 เมษายน 4486d9000 SR711628 ภ.2 หมู่ 1 เพชร บ้านเพชร ภูเขียว ชัยภูมิ CPM-SR711628 172.16.140.50 13,491.77 281,059.85 1086.0 190.0
4 5 2563 เมษายน 4486d9001 SR711630 ภ.2 หมู่ 8 เพชรใต้ บ้านเพชร ภูเขียว ชัยภูมิ CPM-SR711630 172.16.140.58 3,040.24 53,778.04 968.0 239.0
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 14359 entries, 0 to 14358
Data columns (total 16 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   ID           14359 non-null  int64  
 1   YEAR         14359 non-null  int64  
 2   MONTH        14359 non-null  object 
 3   CIRCUIT_NO   14359 non-null  object 
 4   APP_CODE     14359 non-null  object 
 5   REGION       14359 non-null  object 
 6   VILLAGE      14359 non-null  object 
 7   SUBDISTRICT  14359 non-null  object 
 8   DISTRICT     14359 non-null  object 
 9   PROVINCE     14359 non-null  object 
 10  AP_NAME      14358 non-null  object 
 11  IP_ADDRESS   14358 non-null  object 
 12  UPLOAD       14358 non-null  object 
 13  DOWNLOAD     14358 non-null  object 
 14  NUM_USERS    14358 non-null  float64
 15  NUM_DEVICES  14358 non-null  float64
dtypes: float64(2), int64(2), object(12)
memory usage: 1.8+ MB

ใช้คำสั่ง value_counts() ตรวจสอบเบื้องต้นว่าคอลัมน์นั้นมีค่าอะไรบ้าง

df["UPLOAD"].value_counts()
 -             62
 0.02           3
 845.91         2
 335.04         2
 1,444.49       2
               ..
 789.29         1
 601.30         1
 34,242.62      1
 16,670.46      1
 27,182.21      1
Name: UPLOAD, Length: 14224, dtype: int64

เห็นว่ามี - อยู่จึงระบุ na_values เพิ่มตอน read_csv

df = pd.read_csv("./usage_63_apr.csv", encoding="ISO-8859-11", thousands=",", na_values=["-"])
df.head()
ID YEAR MONTH CIRCUIT_NO APP_CODE REGION VILLAGE SUBDISTRICT DISTRICT PROVINCE AP_NAME IP_ADDRESS UPLOAD DOWNLOAD NUM_USERS NUM_DEVICES
0 1 2563 เมษายน 7561d9000 SR664610 ภ.4 หมู่ 2 คลองหมาก เกาะลันตาน้อย เกาะลันตา กระบี่ KBI-SR664610 172.18.168.2 2,641.02 23,189.19 77.0 25.0
1 2 2563 เมษายน 4485d9000 SR711371 ภ.2 หมู่ 13 บ้านมะเกลือ บ้านกอก จัตุรัส ชัยภูมิ CPM-SR711371 172.16.140.2 15,079.66 320,717.60 1187.0 80.0
2 3 2563 เมษายน 4485d9001 SR711374 ภ.2 หมู่ 17 บ้านโนนทอง บ้านกอก จัตุรัส ชัยภูมิ CPM-SR711374 172.16.140.10 5,617.27 95,917.28 729.0 88.0
3 4 2563 เมษายน 4486d9000 SR711628 ภ.2 หมู่ 1 เพชร บ้านเพชร ภูเขียว ชัยภูมิ CPM-SR711628 172.16.140.50 13,491.77 281,059.85 1086.0 190.0
4 5 2563 เมษายน 4486d9001 SR711630 ภ.2 หมู่ 8 เพชรใต้ บ้านเพชร ภูเขียว ชัยภูมิ CPM-SR711630 172.16.140.58 3,040.24 53,778.04 968.0 239.0
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 14359 entries, 0 to 14358
Data columns (total 16 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   ID           14359 non-null  int64  
 1   YEAR         14359 non-null  int64  
 2   MONTH        14359 non-null  object 
 3   CIRCUIT_NO   14359 non-null  object 
 4   APP_CODE     14359 non-null  object 
 5   REGION       14359 non-null  object 
 6   VILLAGE      14359 non-null  object 
 7   SUBDISTRICT  14359 non-null  object 
 8   DISTRICT     14359 non-null  object 
 9   PROVINCE     14359 non-null  object 
 10  AP_NAME      14358 non-null  object 
 11  IP_ADDRESS   14358 non-null  object 
 12  UPLOAD       14358 non-null  object 
 13  DOWNLOAD     14358 non-null  object 
 14  NUM_USERS    14358 non-null  float64
 15  NUM_DEVICES  14358 non-null  float64
dtypes: float64(2), int64(2), object(12)
memory usage: 1.8+ MB

ยังแปลงไม่สำเร็จเลยเช็คอีกที

df["UPLOAD"].value_counts()
 -             62
 0.02           3
 845.91         2
 335.04         2
 1,444.49       2
               ..
 789.29         1
 601.30         1
 34,242.62      1
 16,670.46      1
 27,182.21      1
Name: UPLOAD, Length: 14224, dtype: int64

ยังมีค่า - อยู่ เลยเริ่มน่าสงสัย ลองเช็คดูแถวที่คอลัมน์ UPLOAD มีค่าเท่ากับ -

df[df["UPLOAD"] == "-"]
ID YEAR MONTH CIRCUIT_NO APP_CODE REGION VILLAGE SUBDISTRICT DISTRICT PROVINCE AP_NAME IP_ADDRESS UPLOAD DOWNLOAD NUM_USERS NUM_DEVICES

ไม่มีอะไรออกมาเลย แสดงว่าอาจจะมีอักขระแปลก ๆ ติดอยู่กับ - เลยดึงค่ามาเช็ค

df["UPLOAD"].value_counts()[0]
62

ถ้าใส่ [0] ธรรมดาจะออกมาแต่ค่าข้างหลัง เลยต้องใส่ .index[0]

df["UPLOAD"].value_counts().index[0]
' -   '

จะเห็นว่าจริง ๆ แล้วค่าเป็น -

df[df["UPLOAD"] == " -   "]
ID YEAR MONTH CIRCUIT_NO APP_CODE REGION VILLAGE SUBDISTRICT DISTRICT PROVINCE AP_NAME IP_ADDRESS UPLOAD DOWNLOAD NUM_USERS NUM_DEVICES
76 77 2563 เมษายน 3724d9000 SR697893 ภ.5 หมู่ 7 คลองน้ำเขียว ท่าแยก เมืองสระแก้ว สระแก้ว SKE-SR697893 172.19.70.2 - - 0.0 0.0
404 405 2563 เมษายน 3855d9001 SR668686 ภ.5 หมู่ 8 เทพประทาน คลองตะเกรา ท่าตะเกียบ ฉะเชิงเทรา CCO-SR668686 172.19.40.122 - - 0.0 0.0
756 757 2563 เมษายน 4251d9014 SR674914 ภ.2 หมู่ 19 บ้านน้อยนาคำ บ้านผึ้ง เมืองนครพนม นครพนม NPM-SR674914 172.16.164.66 - - 0.0 0.0
973 974 2563 เมษายน 7550d9027 SR677977 ภ.4 หมู่ 10 ปากพยิง ปากพูน เมืองนครศรีธรรมราช นครศรีธรรมราช NRT-SR677977 172.18.208.58 - - 0.0 0.0
1127 1128 2563 เมษายน 5628d9051 SR679261 ภ.3 หมู่ 11 สว่างอารมณ์ ห้วยร่วม หนองบัว นครสวรรค์ NSN-SR679261 172.18.50.42 - - 0.0 0.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
12470 12471 2563 เมษายน 7351d9030 SR679428 ภ.4 หมู่ 7 ปะลุกาแปเราะ ปะลุกาสาเมาะ บาเจาะ นราธิวาส NWT-SR679428 172.18.214.50 - - 0.0 0.0
12723 12724 2563 เมษายน 4463d9145 SR681139 ภ.2 หมู่ 4 หนองแค ทุ่งจังหัน โนนสุวรรณ บุรีรัมย์ BRM2-SR681139 172.16.237.98 - - 0.0 0.0
12943 12944 2563 เมษายน 3721d9104 SR721330 ภ.5 หมู่ 5 เนินบาก เนินหอม เมืองปราจีนบุรี ปราจีนบุรี PRI-SR721330 172.19.61.186 - - 0.0 0.0
13830 13831 2563 เมษายน 3867d9009 SR691633 ภ.5 หมู่ 1 วังล่าง ชากโดน แกลง ระยอง RYG-SR691633 172.19.68.90 - - 0.0 0.0
14341 14342 2563 เมษายน 3724d9106 SR698096 ภ.5 หมู่ 3 หนองยาง โนนหมากเค็ง วัฒนานคร สระแก้ว SKE-SR698096 172.19.77.74 - - 0.0 0.0

62 rows × 16 columns

ลองทดสอบดูแล้วเรียกแถวนั้นออกมาได้ จึงนำค่า - ไประบุใน na_values เพิ่ม

df = pd.read_csv("./usage_63_apr.csv", encoding="ISO-8859-11", thousands=",", na_values=["-", " -   "])
df.head()
ID YEAR MONTH CIRCUIT_NO APP_CODE REGION VILLAGE SUBDISTRICT DISTRICT PROVINCE AP_NAME IP_ADDRESS UPLOAD DOWNLOAD NUM_USERS NUM_DEVICES
0 1 2563 เมษายน 7561d9000 SR664610 ภ.4 หมู่ 2 คลองหมาก เกาะลันตาน้อย เกาะลันตา กระบี่ KBI-SR664610 172.18.168.2 2641.02 23189.19 77.0 25.0
1 2 2563 เมษายน 4485d9000 SR711371 ภ.2 หมู่ 13 บ้านมะเกลือ บ้านกอก จัตุรัส ชัยภูมิ CPM-SR711371 172.16.140.2 15079.66 320717.60 1187.0 80.0
2 3 2563 เมษายน 4485d9001 SR711374 ภ.2 หมู่ 17 บ้านโนนทอง บ้านกอก จัตุรัส ชัยภูมิ CPM-SR711374 172.16.140.10 5617.27 95917.28 729.0 88.0
3 4 2563 เมษายน 4486d9000 SR711628 ภ.2 หมู่ 1 เพชร บ้านเพชร ภูเขียว ชัยภูมิ CPM-SR711628 172.16.140.50 13491.77 281059.85 1086.0 190.0
4 5 2563 เมษายน 4486d9001 SR711630 ภ.2 หมู่ 8 เพชรใต้ บ้านเพชร ภูเขียว ชัยภูมิ CPM-SR711630 172.16.140.58 3040.24 53778.04 968.0 239.0
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 14359 entries, 0 to 14358
Data columns (total 16 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   ID           14359 non-null  int64  
 1   YEAR         14359 non-null  int64  
 2   MONTH        14359 non-null  object 
 3   CIRCUIT_NO   14359 non-null  object 
 4   APP_CODE     14359 non-null  object 
 5   REGION       14359 non-null  object 
 6   VILLAGE      14359 non-null  object 
 7   SUBDISTRICT  14359 non-null  object 
 8   DISTRICT     14359 non-null  object 
 9   PROVINCE     14359 non-null  object 
 10  AP_NAME      14358 non-null  object 
 11  IP_ADDRESS   14358 non-null  object 
 12  UPLOAD       14296 non-null  float64
 13  DOWNLOAD     14296 non-null  float64
 14  NUM_USERS    14358 non-null  float64
 15  NUM_DEVICES  14358 non-null  float64
dtypes: float64(4), int64(2), object(10)
memory usage: 1.8+ MB

ประสบความสำเร็จ