หากใช้ pandas library อยู่แล้ว จะพบว่า read_csv เป็นฟังก์ชันที่ถูกใช้งานบ่อยมาก ใช้สำหรับอ่าน data จากไฟล์ .csv ให้อยู่ในรูปแบบของ DataFrame
บ่อยครั้งเราจะใช้แค่ pandas.read_csv(filepath)
ก็เพียงพอแล้ว
แต่ถ้าเราอยากแปลง data ให้พร้อมใช้มากขึ้นตั้งแต่อ่านไฟล์ล่ะ?
มาดูกันครับว่า read_csv
มี options อะไรน่าสนใจบ้าง
สมมติว่าเรามี data หน้าตาประมาณนี้
$ import io
$ import pandas as pd
$ data="""int,float,date,str,space
001,3.31,2015/01/01,005, left space"""
$ df = pd.read_csv(io.StringIO(data))
$ df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int 1 non-null int64
1 float 1 non-null float64
2 date 1 non-null object
3 str 1 non-null int64
4 space 1 non-null object
dtypes: float64(1), int64(2), object(2)
เรามาลองแปลง data ด้วย options ของ read_csv
กันครับ
1. แปลง data type ให้ columns ทั้งหมด ด้วย dtype
$ pd.read_csv(io.StringIO(data), dtype=object).info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int 1 non-null object
1 float 1 non-null object
2 date 1 non-null object
3 str 1 non-null object
4 space 1 non-null object
dtypes: object(5)
2. แปลง data type บาง columns ด้วย dtype
$ pd.read_csv(io.StringIO(data), dtype={'int':'object'}).info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int 1 non-null object
1 float 1 non-null float64
2 date 1 non-null object
3 str 1 non-null int64
4 space 1 non-null object
dtypes: float64(1), int64(1), object(3)
3. แปลง data type ให้เป็น datetime ด้วย parse_dates
$ pd.read_csv(io.StringIO(data), parse_dates=['date']).info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int 1 non-null int64
1 float 1 non-null float64
2 date 1 non-null datetime64[ns]
3 str 1 non-null int64
4 space 1 non-null object
dtypes: datetime64[ns](1), float64(1), int64(2), object(1)
4. แปลง data type ให้เป็น datetime ด้วย converters
$ pd.read_csv(io.StringIO(data), converters={'date': pd.to_datetime}).info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 int 1 non-null int64
1 float 1 non-null float64
2 date 1 non-null datetime64[ns]
3 str 1 non-null int64
4 space 1 non-null object
dtypes: datetime64[ns](1), float64(1), int64(2), object(1)
5. ลบ white space ใน column ด้วย converters
$ pd.read_csv(io.StringIO(data))['space']
0 left space
Name: space, dtype: object
$ pd.read_csv(io.StringIO(data), converters={'space': str.strip})['space']
0 left space
Name: space, dtype: object
read_csv
มี options ให้ใช้เยอะมากก พี่ ๆ เพื่อน ๆ ลองตัวไหนบ้างแล้ว มาแชร์กันได้นะครับ