Example - Weird NaN Values
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
ประสบความสำเร็จ