Pandas.read_csv มี options อะไรน่าสนใจบ้าง

หากใช้ pandas library อยู่แล้ว จะพบว่า read_csv เป็นฟังก์ชันที่ถูกใช้งานบ่อยมาก ใช้สำหรับอ่าน data จากไฟล์ .csv ให้อยู่ในรูปแบบของ DataFrame

บ่อยครั้งเราจะใช้แค่ pandas.read_csv(filepath) ก็เพียงพอแล้ว

แต่ถ้าเราอยากแปลง data ให้พร้อมใช้มากขึ้นตั้งแต่อ่านไฟล์ล่ะ?

มาดูกันครับว่า read_csv มี options อะไรน่าสนใจบ้าง :star_struck:

สมมติว่าเรามี 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 ให้ใช้เยอะมากก พี่ ๆ เพื่อน ๆ ลองตัวไหนบ้างแล้ว มาแชร์กันได้นะครับ :smile:

References

2 Likes

converters นี่เพิ่งเคยเห็นเลย ดีงาม :star_struck: ปกติโหลดมาแล้วค่อยเอามาแปลงทีหลังตลอด แหะๆ :joy: