পান্ডাস কলামকে ডেটটাইমে রূপান্তর করুন


241

আমার কাছে একটি পান্ডাস ডেটা ফ্রেমে একটি ক্ষেত্র রয়েছে যা স্ট্রিং ফর্ম্যাট হিসাবে আমদানি করা হয়েছিল। এটি একটি ডেটটাইম ভেরিয়েবল হওয়া উচিত। আমি কীভাবে এটি একটি ডেটটাইম কলামে রূপান্তর করব এবং তারপরে তারিখের উপর ভিত্তি করে ফিল্টার করব।

উদাহরণ:

  • ডেটা ফ্রেমের নাম: কাঁচা_ডাটা
  • কলামের নাম: মাইকোল
  • কলামে মান ফর্ম্যাট: '05SEP2014: 00: 00: 00.000'

উত্তর:


430

আপনার ডেটা মেলাতে to_datetimeএকটি ফর্ম্যাট নির্দিষ্ট করে ফাংশনটি ব্যবহার করুন ।

raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

70
দ্রষ্টব্য: formatতর্কটির প্রয়োজন নেই। to_datetimeস্মার্ট. আপনার ডেটা মেলে না চেষ্টা করে এগিয়ে যান এবং চেষ্টা করুন।
সাম্যাথ্র্যাব্রেন্ড

6
এড়ানোর জন্য SettingWithCopyWarning@ Darth-behfans ব্যবহার stackoverflow.com/a/42773096/4487805
আলভারো Loza

3
আপনি যদি কেবল সময় চান এবং তারিখ না চান?
ফ্যাকফি

5
ভয়ানক স্মার্ট নয়। এমনকি কলামের কিছু ডাইফেষ্ট = সত্য বিন্যাসে নির্বিঘ্নে থাকলেও এটি একই কলামের অন্যদের জন্য ডেফাইস্ট = মিথ্যাতে ডিফল্ট হবে। সুতরাং, একটি সুস্পষ্ট বিন্যাসের স্পেসিফিকেশন বা কমপক্ষে ডেফিস্ট প্যারামিটার ব্যবহার করা নিরাপদ।
সিপিবিএল

10
ফর্ম্যাট স্ট্রিংটি ছাড়াই প্রচুর রেকর্ডের সাহায্যে এই ক্রিয়াকলাপটি ধীর হতে পারে। এই উত্তর কেন তা আলোচনা করে। দেখে মনে হচ্ছে infer_datetime_format=Trueযে আপনি যদি বিন্যাসের স্ট্রিংটি অন্তর্ভুক্ত না করেন তবে পার্সিং গতি -10 5-10x (পান্ডাস ডক্স অনুসারে) বৃদ্ধি করতে পারে।
অটওয়ালস

52

আপনি মাইকোলের মানগুলিতে .apply()কাজ করতে ডেটা ফ্রেম পদ্ধতিটি ব্যবহার করতে পারেন :

>>> df = pd.DataFrame(['05SEP2014:00:00:00.000'],columns=['Mycol'])
>>> df
                    Mycol
0  05SEP2014:00:00:00.000
>>> import datetime as dt
>>> df['Mycol'] = df['Mycol'].apply(lambda x: 
                                    dt.datetime.strptime(x,'%d%b%Y:%H:%M:%S.%f'))
>>> df
       Mycol
0 2014-09-05

1
ধন্যবাদ! এটি দুর্দান্ত কারণ এটি আরও বিস্তৃতভাবে প্রযোজ্য তবে অন্য উত্তরটি আরও সরাসরি ছিল। আমার বেশি ভাল
ক্রিস

2
আমার এই উত্তরটি আরও ভাল লেগেছে, কারণ এটি একটি পান্ডাস.টস্লিব.টাইমস্ট্যাম্প অবজেক্টের বিপরীতে ডেটটাইম অবজেক্ট তৈরি করে
Wesanyer

25

রূপান্তর করতে যদি আপনার একাধিক কলাম থাকে তবে আপনি নিম্নলিখিতটি করতে পারেন:

df[["col1", "col2", "col3"]] = df[["col1", "col2", "col3"]].apply(pd.to_datetime)

15
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')

কাজ করে, তবে এটির ফলাফলটির একটি পাইথন সতর্কতার ফলে ফলাফল একটি ডেটা ফ্রেম থেকে একটি স্লাইসের অনুলিপি সেট করার চেষ্টা করছে। .loc[row_indexer,col_indexer] = valueপরিবর্তে ব্যবহার করার চেষ্টা করুন

আমি অনুমান করব এটি কিছু চেইন ইনডেক্সিংয়ের কারণে।


2
আমাকে কয়েকবার চেষ্টা করেছে, তবু এটি কাজ করে: কাঁচা_ডাটা.লোক [:, 'মাইকোল'] = পিডি. টো_ডেটটাইম (কাঁচা_ডাটা ['মাইকোল'], ফর্ম্যাট = '% d% বি% ওয়াই:% এইচ:% এম:% এস ।% f ')
পাইনেগাল্ফ

9

to_datetimeডেটটাইম হিসাবে কলামটি পার্স করার জন্য পান্ডাস ফাংশনটি ব্যবহার করুন । এছাড়াও, ব্যবহার করে infer_datetime_format=True, এটি স্বয়ংক্রিয়ভাবে ফর্ম্যাটটি সনাক্ত করবে এবং উল্লিখিত কলামটি ডেটটাইমে রূপান্তর করবে।

import pandas as pd
raw_data['Mycol'] =  pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.