وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

خواندن و نوشتن فایل‌های CSV در پایتون با پانداها

0 165
زمان لازم برای مطالعه: 7 دقیقه


در حالی که می توانید فایل های CSV را در پایتون با استفاده از داخلی بخوانید و بنویسید open() تابع، یا اختصاص داده شده است csv ماژول – شما همچنین می توانید از پانداها استفاده کنید.

در این مقاله روش استفاده از پایتون را خواهید دید کتابخانه پانداها برای خواندن و نوشتن فایل های CSV.

فایل CSV چیست؟

بیایید به سرعت خلاصه کنیم که یک فایل CSV چیست – چیزی بیش از یک فایل متنی ساده، با پیروی از چند قرارداد قالب بندی. با این حال، رایج ترین، ساده ترین و ساده ترین روش برای ذخیره داده های جدولی است. این فرمت جداول را با پیروی از یک ساختار خاص که به سطرها و ستون ها تقسیم می شود مرتب می کند. این سطرها و ستون ها هستند که حاوی داده های شما هستند.

یک خط جدید هر ردیف را برای شروع ردیف بعدی خاتمه می دهد. به طور مشابه، یک جداکننده، معمولاً یک کاما، ستون‌ها را در هر سطر جدا می‌کند.

به عنوان مثال، ممکن است جدولی به شکل زیر داشته باشیم:

| City         | State        | Capital | Population    |
| ------------ | ------------ | ------- | ------------- |
| Philadelphia | Pennsylvania | No      | 1.581 Million |
| Sacramento   | California   | Yes     | 0.5 Million   |
| New York     | New York     | No      | 8.623 Million |
| Austin       | Texas        | Yes     | 0.95 Million  |
| Miami        | Florida      | No      | 0.463 Million |

اگر بخواهیم آن را به فرمت CSV تبدیل کنیم، به شکل زیر خواهد بود:

City,State,Capital,Population
Philadelphia,Pennsylvania,No,1.581 Million
Sacramento,California,Yes,0.5 Million
New York,New York,No,8.623 Million
Austin,Texas,Yes,0.95 Million
Miami,Florida,No,0.463 Million

اگرچه نام (مقادیر جدا شده با کاما) ذاتاً از کاما به عنوان جداکننده استفاده می کند، می توانید از جداکننده های دیگر (جداکننده) نیز استفاده کنید، مانند نقطه ویرگول (;). هر ردیف از جدول یک خط جدید از فایل CSV است و روشی بسیار فشرده و مختصر برای نمایش داده های جدولی است.

حالا بیایید نگاهی به آن بیاندازیم read_csv() تابع.

خواندن و نوشتن فایل‌های CSV با استفاده از پاندا

Pandas یک چارچوب بسیار قدرتمند و محبوب برای تجزیه و تحلیل و دستکاری داده ها است. یکی از بارزترین ویژگی های پانداها توانایی آن در خواندن و نوشتن انواع فایل ها از جمله CSV و Excel است. شما می توانید به طور موثر و آسان فایل های CSV را در پانداها با استفاده از توابعی مانند دستکاری کنید read_csv() و to_csv().

نصب پانداها

ما باید Pandas را قبل از استفاده از آن نصب کنیم. استفاده کنیم pip:

$ pip install pandas

خواندن فایل‌های CSV با read_csv()

اجازه دهید import مجموعه داده تایتانیک، که می توان به دست آورد روی GitHub:

import pandas as pd
titanic_data = pd.read_csv('titanic.csv')

پانداها این فایل را در دایرکتوری اسکریپت جستجو می کنند، طبیعتا، و ما فقط مسیر فایل را به فایلی که می خواهیم تجزیه کنیم، به عنوان تنها و تنها آرگومان مورد نیاز این روش ارائه می کنیم.

بیایید نگاهی به head() از این مجموعه داده برای اطمینان از اینکه به درستی وارد شده است:

titanic_data.head()

این نتیجه در:

   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S

همچنین، می‌توانید فایل‌های CSV را از منابع آنلاین، مانند GitHub، به سادگی با ارسال URL منبع به read_csv() تابع. بیایید همین فایل CSV را از مخزن GitHub بخوانیم، بدون اینکه ابتدا آن را در دستگاه محلی خود دانلود کنیم:

import pandas as pd

titanic_data = pd.read_csv(r'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')
print(titanic_data.head())

این نیز منجر به:

   PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0            1         0       3  ...   7.2500   NaN         S
1            2         1       1  ...  71.2833   C85         C
2            3         1       3  ...   7.9250   NaN         S
3            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S

(5 rows x 12 columns)

به طور پیش فرض، read_csv() روش از ردیف اول فایل CSV به عنوان سربرگ ستون استفاده می کند. گاهی اوقات، این سرصفحه ها ممکن است نام های عجیب و غریب داشته باشند، و ممکن است بخواهید از سرصفحه های خود استفاده کنید. شما می توانید هدرها را پس از خواندن فایل به سادگی با اختصاص دادن آن تنظیم کنید columns زمینه از DataFrame به عنوان مثال لیست دیگری، یا می توانید در وهله اول هنگام خواندن CSV سرصفحه ها را تنظیم کنید.

بیایید لیستی از نام ستون ها را تعریف کنیم و از آن نام ها به جای نام های موجود در فایل CSV استفاده کنیم:

import pandas as pd

col_names = ('Id',
             'Survived',
             'Passenger Class',
             'Full Name',
             'Gender',
             'Age',
             'SibSp',
             'Parch',
             'Ticket Number',
             'Price', 'Cabin',
             'Station')

titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', names=col_names)
print(titanic_data.head())

بیایید این کد را اجرا کنیم:

            Id  Survived Passenger Class  ...    Price  Cabin   Station
0  PassengerId  Survived          Pclass  ...     Fare  Cabin  Embarked
1            1         0               3  ...     7.25    NaN         S
2            2         1               1  ...  71.2833    C85         C
3            3         1               3  ...    7.925    NaN         S
4            4         1               1  ...     53.1   C123         S

هوم! اکنون ما سرصفحه های سفارشی خود را داریم، اما اولین ردیف فایل CSV، که در ابتدا برای تنظیم نام ستون ها استفاده می شد، نیز در آن گنجانده شده است DataFrame. ما می خواهیم از این خط بگذریم، زیرا دیگر برای ما ارزشی ندارد.

پرش از ردیف ها هنگام خواندن CSV

بیایید با استفاده از این مشکل را حل کنیم skiprows بحث و جدل:

import pandas as pd

col_names = ('Id',
             'Survived',
             'Passenger Class',
             'Full Name',
             'Gender',
             'Age',
             'SibSp',
             'Parch',
             'Ticket Number',
             'Price', 'Cabin',
             'Station')

titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', names=col_names, skiprows=(0))
print(titanic_data.head())

حالا بیایید این کد را اجرا کنیم:

   Id  Survived  Passenger Class  ...    Price Cabin  Station
0   1         0                3  ...   7.2500   NaN        S
1   2         1                1  ...  71.2833   C85        C
2   3         1                3  ...   7.9250   NaN        S
3   4         1                1  ...  53.1000  C123        S
4   5         0                3  ...   8.0500   NaN        S

مانند یک طلسم کار می کند! این skiprows آرگومان لیستی از ردیف هایی را می پذیرد که می خواهید رد شوید. شما می توانید به عنوان مثال رد شوید 0, 4, 7 اگر شما هم دوست دارید:

titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', names=col_names, skiprows=(0, 4, 7))
print(titanic_data.head(10))

این منجر به یک DataFrame که برخی از ردیف‌هایی را که قبلاً دیده‌ایم ندارد:

   Id  Survived  Passenger Class  ...    Price Cabin  Station
0   1         0                3  ...   7.2500   NaN        S
1   2         1                1  ...  71.2833   C85        C
2   3         1                3  ...   7.9250   NaN        S
3   5         0                3  ...   8.0500   NaN        S
4   6         0                3  ...   8.4583   NaN        Q
5   8         0                3  ...  21.0750   NaN        S
6   9         1                3  ...  11.1333   NaN        S
7  10         1                2  ...  30.0708   NaN        C
8  11         1                3  ...  16.7000    G6        S
9  12         1                1  ...  26.5500  C103        S

به خاطر داشته باشید که پرش از ردیف ها اتفاق می افتد قبل از را DataFrame به طور کامل تشکیل شده است، بنابراین هیچ شاخصی از آن را از دست نخواهید داد DataFrame خود، هر چند، در این مورد، شما می توانید ببینید که Id فیلد (وارد شده از فایل CSV) فاقد شناسه است 4 و 7.

شما همچنین می توانید تصمیم بگیرید که هدر را به طور کامل حذف کنید، که منجر به a DataFrame که به سادگی دارد 0...n ستون های سرصفحه، با تنظیم header استدلال به None:

titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', header=None, skiprows=(0))

شما همچنین می خواهید از ردیف اول در اینجا رد شوید، زیرا اگر این کار را نکنید، مقادیر ردیف اول در واقع در ردیف اول قرار می گیرند:

   0   1   2                                                  3       4   ...  7                 8        9 
0   1   0   3                            Braund, Mr. Owen Harris    male  ...   0         A/5 21171   7.2500
1   2   1   1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  ...   0          PC 17599  71.2833
2   3   1   3                             Heikkinen, Miss. Laina  female  ...   0  STON/O2. 3101282   7.9250
3   4   1   1       Futrelle, Mrs. Jacques Heath (Lily May Peel)  female  ...   0            113803  53.1000
4   5   0   3                           Allen, Mr. William Henry    male  ...   0            373450   8.0500

تعیین جداکننده ها

همانطور که قبلاً گفته شد، در نهایت احتمالاً با یک فایل CSV روبرو خواهید شد که در واقع از کاما برای جداسازی داده ها استفاده نمی کند. در چنین مواقعی می توانید از sep آرگومان برای تعیین جداکننده های دیگر:

titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', sep=';')

نوشتن فایل های CSV با to_csv()

از نو، DataFrames جدولی هستند. چرخاندن a DataFrame تبدیل یک فایل CSV به یک فایل CSV ساده است DataFrame – ما به write_csv() تابع روی را DataFrame نمونه، مثال.

هنگام نوشتن الف DataFrame به یک فایل CSV، می‌توانید نام ستون‌ها را نیز با استفاده از columns آرگومان، یا تعیین یک جداکننده از طریق sep بحث و جدل. اگر هیچکدام از اینها را مشخص نکنید، در نهایت با یک فایل استاندارد ارزش جدا شده با کاما مواجه خواهید شد.

بیایید با این بازی کنیم:

import pandas as pd
cities = pd.DataFrame((('Sacramento', 'California'), ('Miami', 'Florida')), columns=('City', 'State'))
cities.to_csv('cities.csv')

در اینجا، ما یک ساده ساخته ایم DataFrame با دو شهر و ایالت مربوط به آنها. سپس، ما جلو رفتیم و آن داده ها را با استفاده از یک فایل CSV ذخیره کردیم to_csv() و نام فایل را ارائه کرد.

این منجر به یک فایل جدید در دایرکتوری کاری اسکریپتی می شود که در حال اجرا هستید، که شامل:

,City,State
0,Sacramento,California
1,Miami,Florida

اگرچه، این واقعاً به خوبی قالب بندی نشده است. ما هنوز شاخص ها را از DataFrame، که همچنین یک نقطه گمشده عجیب را قبل از نام ستون ها قرار می دهد. اگر این CSV را دوباره به a وارد کنیم DataFrame، خراب می شود:

df = pd.read_csv('cities.csv')
print(df)

این نتیجه در:

   Unnamed: 0        City       State
0           0  Sacramento  California
1           1       Miami     Florida

شاخص ها از DataFrame در نهایت تبدیل به یک ستون جدید شد، که اکنون است Unnamed.

هنگام ذخیره فایل، مطمئن شویم رها کردن شاخص از DataFrame:

import pandas as pd
cities = pd.DataFrame((('Sacramento', 'California'), ('Miami', 'Florida')), columns=('City', 'State'))
cities.to_csv('cities.csv', index=False)

اکنون، این منجر به فایلی می شود که حاوی:

City,State
Sacramento,California
Miami,Florida

مانند یک طلسم کار می کند! اگر دوبارهimport آن و print محتویات، DataFrame به خوبی ساخته شده است:

df = pd.read_csv('cities.csv')
print(df)

این نتیجه در:

         City       State
0  Sacramento  California
1       Miami     Florida

بیایید هدر ستون ها را از سرصفحه های پیش فرض تغییر دهیم:

import pandas as pd
cities = pd.DataFrame((('Sacramento', 'California'), ('Miami', 'Florida')), columns=('City', 'State'))
new_column_names = ('City_Name', 'State_Name')
cities.to_csv('cities.csv', index=False, header=new_column_names)

ما ساخته ایم new_header لیستی که حاوی مقادیر مختلف برای ستون های ما است. سپس با استفاده از header آرگومان، ما اینها را به جای نام ستون اصلی تنظیم کرده ایم. این تولید یک cities.csv با این مطالب:

City_Name,State_Name
Sacramento,California
Miami,Florida
Washington DC,Unknown

سفارشی سازی جداکننده

بیایید جداکننده را از پیش فرض تغییر دهیم (,) ارزش به یک جدید:

import pandas as pd
cities = pd.DataFrame((('Sacramento', 'California'), ('Miami', 'Florida')), columns=('City', 'State'))
cities.to_csv('cities.csv', index=False, sep=';')

این منجر به یک cities.csv فایلی که شامل:

City;State
Sacramento;California
Miami;Florida

مدیریت ارزش های گمشده

گاهی، DataFrameمقادیر گم شده ای دارند که ما به عنوان آنها را ترک کرده ایم NaN یا NA. در چنین مواردی، ممکن است بخواهید زمانی که آنها را در یک فایل CSV می نویسید، آنها را قالب بندی کنید. می توانید استفاده کنید na_rep آرگومان و مقداری را که باید به جای یک مقدار گمشده قرار داده شود تنظیم کنید:

import pandas as pd
cities = pd.DataFrame((('Sacramento', 'California'), ('Miami', 'Florida'), ('Washington DC', pd.NA)), columns=('City', 'State'))
cities.to_csv('cities.csv', index=False, na_rep='Unknown')

در اینجا، ما دو جفت شهر-ایالت معتبر داریم، اما Washington DC حالت خود را از دست داده است اگر این کد را اجرا کنیم، نتیجه آن a cities.csv با مطالب زیر:

City,State
Sacramento,California
Miami,Florida
Washington DC,Unknown

نتیجه

این مقاله روش خواندن و نوشتن فایل‌های CSV را با استفاده از کتابخانه Pandas پایتون نشان می‌دهد. برای خواندن یک فایل CSV، read_csv() از روش کتابخانه پانداها استفاده شده است. همچنین می‌توانید نام‌های هدر سفارشی را هنگام خواندن فایل‌های CSV از طریق names ویژگی از read_csv() روش. در نهایت، برای نوشتن یک فایل CSV با استفاده از Pandas، ابتدا باید یک شی Pandas DataFrame ایجاد کنید و سپس آن را فراخوانی کنید. to_csv روش روی DataFrame

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-17 22:03:10

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید