প্যানডাস ডেটা ফ্রেমে ইউনিক্স সময়কে পঠনযোগ্য তারিখে রূপান্তর করুন


109

আমার কাছে ইউনিক্স সময় এবং দাম সহ একটি ডেটাফ্রেম রয়েছে। আমি সূচী কলামটি রূপান্তর করতে চাই যাতে এটি মানব পাঠযোগ্য তারিখগুলিতে প্রদর্শিত হয়।

উদাহরণস্বরূপ আমার সূচী কলামে dateযেমন 1349633705রয়েছে তবে আমি এটি 10/07/2012(বা কমপক্ষে 10/07/2012 18:15) হিসাবে দেখাতে চাই ।

কিছু প্রসঙ্গে, আমি যে কোডটি নিয়ে কাজ করছি এবং যা ইতিমধ্যে চেষ্টা করেছি তা এখানে রয়েছে:

import json
import urllib2
from datetime import datetime
response = urllib2.urlopen('http://blockchain.info/charts/market-price?&format=json')
data = json.load(response)   
df = DataFrame(data['values'])
df.columns = ["date","price"]
#convert dates 
df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))
df.index = df.date   

আপনি দেখতে পাচ্ছেন যে আমি এখানে ব্যবহার করছি df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))যা কাজ করে না কারণ আমি পূর্ণসংখ্যার সাথে কাজ করছি, স্ট্রিংয়ের সাথে নয়। আমি মনে করি আমার ব্যবহার করা দরকার datetime.date.fromtimestampতবে কীভাবে এটি পুরোপুরি প্রয়োগ করতে হবে তা সম্পর্কে আমি নিশ্চিত নই df.date

ধন্যবাদ।

উত্তর:


218

এগুলি যুগের পর থেকে কয়েক সেকেন্ড পরে দেখা যায়।

In [20]: df = DataFrame(data['values'])

In [21]: df.columns = ["date","price"]

In [22]: df
Out[22]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 358 entries, 0 to 357
Data columns (total 2 columns):
date     358  non-null values
price    358  non-null values
dtypes: float64(1), int64(1)

In [23]: df.head()
Out[23]: 
         date  price
0  1349720105  12.08
1  1349806505  12.35
2  1349892905  12.15
3  1349979305  12.19
4  1350065705  12.15
In [25]: df['date'] = pd.to_datetime(df['date'],unit='s')

In [26]: df.head()
Out[26]: 
                 date  price
0 2012-10-08 18:15:05  12.08
1 2012-10-09 18:15:05  12.35
2 2012-10-10 18:15:05  12.15
3 2012-10-11 18:15:05  12.19
4 2012-10-12 18:15:05  12.15

In [27]: df.dtypes
Out[27]: 
date     datetime64[ns]
price           float64
dtype: object

1
এবং ০.০৩-এ আপনি_ডন_উইনট ব্যবহার করতে সক্ষম হবেন যখন পড়ুন_জসন: ডি
অ্যান্ডি হেডেন

গ্রেট! আপনার সমাধান নিখুঁত জ্ঞান করে। পান্ডাস: টাইমস্ট্যাম্পে রূপান্তর করা বেশ সুন্দরভাবে চলেছে এখন আমি টু ডেটটাইম সম্পর্কেও জানি know
ডব্লিউএ কার্নেগি

আর একটি বিষয়। এটি আমার জন্য ০.০১ এ কাজ করে নি তবে 0.12+ এ জরিমানা হয়েছে
ডাব্লুএ কার্নেগি

1
এই সমাধান আমাকে দেয় OverflowError: Python int too large to convert to C long
যদি __ নাম__

2
কিছুই নয়, মিলিসেকেন্ড টাইমস্ট্যাম্প ছিল, কেবল ছিল lambda x: x/1000.0, বা unit='ms'
যদি __ নাম__ কোনওটি

48

আপনি যদি ব্যবহার করার চেষ্টা করেন:

df[DATE_FIELD]=(pd.to_datetime(df[DATE_FIELD],***unit='s'***))

এবং একটি ত্রুটি পান:

"pandas.tslib.OutOfBoundsDatetime: ইউনিটের 's' দিয়ে ইনপুট রূপান্তর করতে পারে না"

এর অর্থ DATE_FIELDসেকেন্ডে নির্দিষ্ট করা হয়নি।

আমার ক্ষেত্রে, এটি মিলি সেকেন্ড ছিল - EPOCH time

রূপান্তরটি নীচে ব্যবহার করে কাজ করেছে:

df[DATE_FIELD]=(pd.to_datetime(df[DATE_FIELD],unit='ms')) 

15

ধরে নিই আমরা আমদানি করেছি pandas as pdএবং dfএটি আমাদের ডেটাফ্রেম

pd.to_datetime(df['date'], unit='s')

আমার জন্য কাজ কর.


0

বিকল্পভাবে উপরের কোডের একটি লাইন পরিবর্তন করে:

# df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))
df.date = df.date.apply(lambda d: datetime.datetime.fromtimestamp(int(d)).strftime('%Y-%m-%d'))

এটি কাজ করা উচিত।

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