তারিখ অনুসারে পান্ডাস ডেটা ফ্রেম বাছাই করুন


93

আমার কাছে নীচে একটি পান্ডাস ডেটা ফ্রেম রয়েছে:

Symbol  Date
A       02/20/2015
A       01/15/2016
A       08/21/2015

আমি এটি অনুসারে বাছাই করতে চাই Dateতবে কলামটি কেবল একটি object

আমি কলামটিকে একটি তারিখের অবজেক্ট তৈরি করার চেষ্টা করেছি, তবে আমি এমন একটি সমস্যায় পড়েছিলাম যেখানে সেই বিন্যাসটি বিন্যাসের প্রয়োজন হয় না। প্রয়োজনীয় বিন্যাস 2015-02-20,ইত্যাদি etc.

সুতরাং এখন আমি কীভাবে 'আমেরিকান' তারিখগুলিকে আইএসও স্ট্যান্ডার্ডে রূপান্তর করতে পারি তা বুঝতে চেষ্টা করছি, যাতে আমি তাদের তারিখের বিষয়গুলি তৈরি করতে পারি, যাতে আমি তাদের অনুসারে বাছাই করতে পারি।

আমি কীভাবে এই আমেরিকান তারিখগুলিকে আইএসও স্ট্যান্ডার্ডে রূপান্তর করব, বা পাণ্ডার মধ্যে আমি আরও সোজা ফরোয়ার্ড পদ্ধতি অনুপস্থিত রয়েছি?

উত্তর:


142

আপনি pd.to_datetime()একটি ডেটটাইম অবজেক্টে রূপান্তর করতে ব্যবহার করতে পারেন । এটি একটি ফর্ম্যাট প্যারামিটার লাগে, তবে আপনার ক্ষেত্রে আমি মনে করি না এটির আপনার প্রয়োজন need

>>> import pandas as pd
>>> df = pd.DataFrame( {'Symbol':['A','A','A'] ,
    'Date':['02/20/2015','01/15/2016','08/21/2015']})
>>> df
         Date Symbol
0  02/20/2015      A
1  01/15/2016      A
2  08/21/2015      A
>>> df['Date'] =pd.to_datetime(df.Date)
>>> df.sort('Date') # This now sorts in date order
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A

ভবিষ্যতের সন্ধানের জন্য, আপনি বাছাই বিবৃতি পরিবর্তন করতে পারেন:

>>> df.sort_values(by='Date') # This now sorts in date order
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A

4
বাছাইয়ের আগে আমার কাছে একটি ডিএফ ['তারিখ'] রয়েছে unique অনন্য (), যা ডেটাফ্রেমের পরিবর্তে সিরিজ দেয়। এটি 02/20/2015 কে 2015-02-19T18: 00: 00.000000000-0600 এ পরিণত করে যা এরপরে 2015-02-19 এ বিভক্ত হয়। একটি দিন যোগ করার উপায় আছে? বা এটিকে সংশোধন করার আরও একটি আনুষ্ঠানিক উপায়?
নিকোলাস.রিচেল

4
df.Date.astype(np.int64)যুগের জন্য কাজ করা উচিত
জাব

4
দেখা যাচ্ছে যে মহাকাব্যটি ভুল হতে হবে কারণ এটি অনুমানের সময় 18:00 ঘন্টা ইত্যাদি etc. আমার যদি একটি সময় বা ভুল সময় না দিয়ে কেবল তারিখের অবজেক্টগুলি পেতে পারি তবে আমার যুগে রূপান্তর করার একটি উপায় আছে।
নিকোলাস.রিচেল

আমার জন্য pd.to_datetime(df.Date)[0]প্রত্যাবর্তনTimestamp('2015-02-20 00:00:00')
জ্যাব

ইস্যুর আরও আনুষ্ঠানিক বিবরণ দিয়ে নতুন প্রশ্ন শুরু করা হচ্ছে
নিকোলাস.রিচেল

90

sortপদ্ধতি অবমূল্যায়ন করা হয়েছে এবং এর সাথে প্রতিস্থাপন করা হয়েছে sort_values। ডেটটাইম অবজেক্ট ব্যবহার করে রূপান্তর করার পরেdf['Date']=pd.to_datetime(df['Date'])

df.sort_values(by=['Date'])

দ্রষ্টব্য: স্থান এবং / বা একটি উতরাইয়ের ক্রমে সাজানো (অতি সাম্প্রতিক প্রথম):

df.sort_values(by=['Date'], inplace=True, ascending=False)

4
আমি আপনাকে এটি ব্যবহার করার পরামর্শ দিচ্ছি: df.sort_values ​​(= ['তারিখ'] দ্বারা)
এফএলবি কার্নেল

11

@ জ্যাব এর উত্তর দ্রুত এবং সংক্ষিপ্ত। তবে এটি DataFrameআপনি বাছাই করার চেষ্টা করছেন এমন পরিবর্তন করে যা আপনি চাইবেন বা নাও চান।

( নোট : আপনি প্রায় অবশ্যই হবে এটি করতে চান, কারণ আপনার তারিখ কলাম তারিখ, না স্ট্রিং হওয়া উচিত!)

আপনি তারিখগুলিকে তারিখগুলিতে পরিবর্তন করতে চান না এমন সম্ভাব্য ইভেন্টে আপনি এটিকে অন্যভাবেও করতে পারেন।

প্রথমে আপনার সাজানো Dateকলাম থেকে সূচকটি পান :

In [25]: pd.to_datetime(df.Date).order().index
Out[25]: Int64Index([0, 2, 1], dtype='int64')

তারপরে DataFrameএটিকে কোনও ছোঁয়াচে রেখে এটিকে আপনার মূল সূচক করতে ব্যবহার করুন :

In [26]: df.ix[pd.to_datetime(df.Date).order().index]
Out[26]: 
        Date Symbol
0 2015-02-20      A
2 2015-08-21      A
1 2016-01-15      A

যাদু!

দ্রষ্টব্য: পান্ডাস সংস্করণগুলির জন্য 0.20.0 এবং তারপরে, এর locপরিবর্তে ব্যবহার করুন ix, যা এখন হ্রাস করা হয়েছে।


0

তারিখের কলামযুক্ত ডেটা নীচের কোডটি ব্যবহার করে পড়া যেতে পারে:

data = pd.csv(file_path,parse_dates=[date_column])

উপরের কোডের লাইনটি ব্যবহার করে ডেটা পাঠ করা হয়ে গেলে, তারিখ সম্পর্কিত তথ্য সম্বলিত কলামটি এগুলি ব্যবহার করে ব্যবহার করা যেতে পারে pd.date_time():

pd.date_time(data[date_column], format = '%d/%m/%y')

প্রয়োজন অনুযায়ী তারিখের ফর্ম্যাট পরিবর্তন করতে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.