কীভাবে তারিখ/তারিখের সময় কলামগুলি স্বয়ংক্রিয়ভাবে সনাক্ত করবেন এবং পান্ডাসে একটি CSV ফাইল পড়ার সময় তাদের ডেটাটাইপ সেট করবেন

উত্স নোড: 1106147

কীভাবে তারিখ/তারিখের সময় কলামগুলি স্বয়ংক্রিয়ভাবে সনাক্ত করবেন এবং পান্ডাসে একটি CSV ফাইল পড়ার সময় তাদের ডেটাটাইপ সেট করবেন

যখন read_csv( ) পড়ে যেমন "2021-03-04" এবং "2021-03-04 21:37:01.123" নিছক "অবজেক্ট" ডেটাটাইপ হিসাবে, প্রায়ই আপনি সেগুলিকে একবারে সত্য ডেটটাইম ডেটাটাইপে স্বয়ংক্রিয়ভাবে রূপান্তর করতে পারেন৷


By ডেভিড বি রোজেন (পিএইচডি), IBM গ্লোবাল ফাইন্যান্সিং-এ স্বয়ংক্রিয় ক্রেডিট অনুমোদনের জন্য লিড ডেটা সায়েন্টিস্ট



বলুন আমার একটি CSV ডেটা ফাইল আছে যা আমি একটি পান্ডাস ডেটাফ্রেমে পড়তে চাই, এবং এর কিছু কলাম তারিখ বা তারিখের সময়, কিন্তু আমি এই কলামগুলির নাম আগে থেকে সনাক্ত/নির্দিষ্ট করতে বিরক্ত করতে চাই না। পরিবর্তে আমি স্বয়ংক্রিয়ভাবে তে দেখানো ডেটাটাইপগুলি পেতে চাই df.info() আউটপুট চিত্রিত উপরে, যেখানে উপযুক্ত কলাম হয়েছে স্বয়ংক্রিয়ভাবে একটি ডেটটাইম ডেটাটাইপ দেওয়া হয়েছে (সবুজ রূপরেখা বাক্স)। এটি কীভাবে সম্পাদন করা যায় তা এখানে:

from dt_auto import read_csv
df=read_csv('myfile.csv')

উল্লেখ্য যে আমি করেছি না উপরে সরাসরি pd.read_csv (read_csv-এর পান্ডাস সংস্করণ) আহ্বান করুন। আমার dt_auto.read_csv ফাংশন (নীচে এর কোডটি দেখুন) নিজেই pd.read_csv() চালু করেছে এবং তারপর স্বয়ংক্রিয়ভাবে সনাক্ত করা দুটি ডেটটাইম কলামের ডেটাটাইপ সনাক্ত ও রূপান্তর করেছে। (এই ডিএফ-এর বিষয়বস্তু নীচে দেখানো হবে।)

আমি যদি নিয়মিত পান্ডাস pd.read_csv() ব্যবহার করতাম, তাহলে আমি ডিফল্টভাবে নীচের মত করে শুধুমাত্র জেনেরিক অবজেক্ট ডেটাটাইপ পেতাম (লাল আউটলাইন বক্স):

from pandas import read_csv
df=read_csv('myfile.csv')
df.info()



মনে রাখবেন যে মূল কোড থেকে একমাত্র পার্থক্য ইম্পোর্ট স্টেটমেন্টে, যেখানে আমি "from dt_auto" থেকে "পান্ডা থেকে" এ পরিবর্তন করেছি। এটি যথেষ্ট যতক্ষণ না আপনি শুধুমাত্র “=read_csv()” ব্যবহার করেন, এটিকে “=pd.read_csv()” বা “=dt_auto.read_csv()” হিসাবে যোগ্য না করে।

এখানে আমার বিষয়বস্তু dt_auto.py ("তারিখ সময় স্বয়ংক্রিয়"):

import pandas as pd
def dt_inplace(df): """Automatically detect and convert (in place!) each dataframe column of datatype 'object' to a datetime just when ALL of its non-NaN values can be successfully parsed by pd.to_datetime(). Also returns a ref. to df for convenient use in an expression. """ from pandas.errors import ParserError for c in df.columns[df.dtypes=='object']: #don't cnvt num try: df[c]=pd.to_datetime(df[c]) except (ParserError,ValueError): #Can't cnvrt some pass # ...so leave whole column as-is unconverted return df
def read_csv(*args, **kwargs): """Drop-in replacement for Pandas pd.read_csv. It invokes pd.read_csv() (passing its arguments) and then auto- matically detects and converts each column whose datatype is 'object' to a datetime just when ALL of the column's non-NaN values can be successfully parsed by pd.to_datetime(), and returns the resulting dataframe. """ return dt_inplace(pd.read_csv(*args, **kwargs))

কিন্তু এটা কি ঝুঁকিপূর্ণ নয়? যদি কলামগুলির একটি সম্পূর্ণরূপে একটি তারিখের কলাম না হয়? অবশ্যই আপনার কাছে কিছু অস্পষ্ট স্ট্রিং থাকতে পারে যেগুলি কেবল তারিখের মতো দেখায় তবে তা নয়, তবে দুটি কারণে এই কোডটি অন্ধভাবে রূপান্তরিত হবে বা নন-ডেটটাইম স্ট্রিংগুলি হারাবে এমন ঝুঁকি নেই:

  1. এই কোড হবে না একটি কলামে যেকোনো মান রূপান্তর করুন যদি না প্রতি এই কলামে নন-NaN মান সফলভাবে pd.to_datetime দ্বারা পার্স করা যেতে পারে এবং একটি datetime এ রূপান্তরিত করা যেতে পারে। অন্য কথায়, আমরা এটিকে কখনই একটি স্ট্রিংকে pd.NaT ("ব্যর্থতা" ফলাফল) তে রূপান্তর করতে দেব না কারণ এটি তারিখের সময় হিসাবে এটি বুঝতে পারে না।
  2. এটা হবে না কলামগুলিকে রূপান্তর করার চেষ্টা করুন যা ইতিমধ্যেই অবজেক্ট ব্যতীত অন্য কোনও প্রকার হিসাবে ব্যাখ্যা করা হয়েছে, যেমন int64 বা float64 এর মতো যে কোনও নির্দিষ্ট প্রকার, যদিও pd.to_datetime 2000-2000 তারিখে 01-এর মতো একটি সংখ্যাকে খুশিতে রূপান্তরিত করেছে (কিন্তু সম্ভবত অবাঞ্ছিতভাবে) -01।

এখন পর্যন্ত আমার অভিজ্ঞতায়, dt_auto.read_csv ফাংশনটি একটি সাধারণ ডেটাফ্রেমে চলতে বেশি সময় নেয় না। এমনকি যদি অনেকগুলি নন-ডেটটাইম অবজেক্ট (স্ট্রিং) কলাম থাকে, তবে এটি প্রায় সবসময়ই খুব দ্রুত এই ধরনের প্রতিটি কলামের শীর্ষের কাছে একটি মানের সম্মুখীন হয় যা এটি তারিখের সময় হিসাবে পার্স করতে পারে না এবং ছেড়ে দেয় এবং পরবর্তী কলামে চলে যায় কলামের বাকি মান পার্স করার চেষ্টা না করে।

dt_auto.read_csv() থেকে প্রাপ্ত ডেটাফ্রেমটি কেমন দেখায় তা এখানে, যদিও আপনি এটি দেখে অগত্যা বলতে পারবেন না যে দুটি উপযুক্ত কলাম প্রকৃতপক্ষে তারিখের ডেটাটাইপ। যেমনটি ঘটে, CSV ফাইলে Update_Timestamp-এ সেকেন্ডের জন্য বিভিন্ন দশমিক স্থান (তিন, কোনোটিই নয় এবং নয়) ছিল, কিন্তু তারিখের ডেটাটাইপ নির্বিশেষে এই ধরনের নয়টি সংখ্যা দেখায়। CSv ফাইলে জন্মতারিখ আসলে শুধুমাত্র তারিখ ছিল (কোনও সময় নেই) কিন্তু ঘন্টা, মিনিট এবং সেকেন্ডের জন্য শূন্য সহ (দশমিক অংশ হিসাবে শূন্য সহ) একটি সম্পূর্ণ তারিখ সময় হিসাবে সংরক্ষণ করা হয়েছিল, তবে কলামের সমস্ত সময়ের উপাদান শূন্য হওয়ার কারণে পান্ডা এই কলামের জন্য শুধুমাত্র তারিখ (বছর-মাস-দিন) প্রদর্শন করে।



অবশ্যই pd.to_datetime, এবং এইভাবে dt_auto.read_csv, ডিফল্টরূপে সমস্ত সম্ভাব্য তারিখ এবং তারিখ সময় বিন্যাস পরিচালনা করতে পারে না, তবে এটি অনেক সাধারণ দ্ব্যর্থহীন (সাধারণত বছরের মাস দিন) ফর্ম্যাটগুলি পরিচালনা করবে যেমন dataframe.to_csv পদ্ধতি দ্বারা লেখা এবং অন্যান্য অনেকগুলি অনেকগুলি ISO ডেটটাইম ফর্ম্যাট সহ টুলস (যা সাধারণত একটি স্থানের পরিবর্তে সময় থেকে তারিখকে আলাদা করে একটি "T" থাকে)। আমি টাইমজোন তথ্য অন্তর্ভুক্ত করে এমন ডেটটাইম নিয়ে পরীক্ষা করিনি কারণ আমি সাধারণত এরকম ডেটা দেখি না, তবে দয়া করে আমাকে একটি প্রতিক্রিয়া মন্তব্যে জানান যে কোডে আরও পরিবর্তন করে এগুলি আরও ভালভাবে পরিচালনা করা যেতে পারে কিনা।

আপনি কি মনে করেন? আপনি এই ছোট নিবন্ধ দরকারী খুঁজে পেয়েছেন? এবং পান্ডাসকেই কি যোগ করতে হবে (যেমন pd.read_csv ফাংশনে নিজেই?) ঐচ্ছিকভাবে আমাদের জন্য এটি করার ক্ষমতা যাতে আপনাকে উপরের আমার dt_auto.py কোডটি অনুলিপি/আমদানি করতে হবে না? আমি এখানে প্রতিক্রিয়া হিসাবে আপনার মন্তব্য এবং প্রশ্ন দেখতে খুশি হবে.

 
এলিয়ট গানকে ধন্যবাদ।

 
বায়ো: ডেভিড বি রোজেন (পিএইচডি) আইবিএম গ্লোবাল ফাইন্যান্সিং-এ স্বয়ংক্রিয় ক্রেডিট অনুমোদনের জন্য লিড ডেটা সায়েন্টিস্ট। ডেভিড এর লেখা আরো খুঁজুন dabruro.medium.com.

মূল। অনুমতি নিয়ে পোস্ট করা।

সম্পর্কিত:



শীর্ষ গল্পগুলি গত 30 দিন
সবচেয়ে জনপ্রিয়
  1. আপনি কি পাইথন দিয়ে এক্সেল ফাইল পড়েন? 1000x দ্রুততর পথ আছে
  2. ডেটা ইঞ্জিনিয়ারিং দক্ষতা ছাড়া ডেটা বিজ্ঞানীরা কঠোর সত্যের মুখোমুখি হবেন
  3. একটি ডেটা সায়েন্স পোর্টফোলিও যা আপনাকে চাকরি দেবে
  4. পাইথন ব্যবহার করে মাইক্রোসফট এক্সেল এবং ওয়ার্ড স্বয়ংক্রিয় করুন
  5. কিভাবে আপনার ডেটা সায়েন্স প্রজেক্টের জন্য অত্যাশ্চর্য ওয়েব অ্যাপস তৈরি করবেন
সর্বাধিক ভাগ করা
  1. ডাটা পুন Re ব্যালেন্স না করে কিভাবে ভারসাম্যহীন শ্রেণীবিভাগের সাথে মোকাবিলা করতে হয়
  2. আপনার মেশিন লার্নিং মডেলগুলিতে দুর্বলতাগুলি কীভাবে সন্ধান করবেন
  3. মেশিন ও ডিপ লার্নিং কম্পেন্ডিয়াম ওপেন বুক
  4. ডেটা ইঞ্জিনিয়ারিং দক্ষতা ছাড়া ডেটা বিজ্ঞানীরা কঠোর সত্যের মুখোমুখি হবেন
  5. হাইপোথিসিস টেস্টিং ব্যাখ্যা করা হয়েছে

সূত্র: https://www.kdnuggets.com/2021/10/auto-detect-date-datetime-columns-and-set-their-datatype-when-reading-a-csv-file-in-pandas.html

সময় স্ট্যাম্প:

থেকে আরো কেডনুগেটস

শীর্ষ খবর, সেপ্টেম্বর 6-12: আপনি কি পাইথন দিয়ে এক্সেল ফাইলগুলি পড়েন? একটি 1000x দ্রুত উপায় আছে; 8 নতুনদের জন্য গভীর শিক্ষার প্রকল্পের ধারণা

উত্স নোড: 1866658
সময় স্ট্যাম্প: সেপ্টেম্বর 13, 2021