2015-05-22 17 views
17

इस प्रश्न के लिए खेद है जो दोहराव लगता है - मुझे उम्मीद है कि उत्तर मुझे हड्डी की तरह महसूस करेगा। .. लेकिन मुझे SO पर समान प्रश्नों के उत्तर का उपयोग करके कोई भाग्य नहीं मिला है।डाइटाइम --- डीएफ ['वर्ष'] = डीएफ ['तारीख'] से वर्ष पाइथन पांडा निकालने का वर्ष।

मैं read_csv के माध्यम से डेटा आयात कर रहा हूं, लेकिन किसी कारण से जिसे मैं समझ नहीं पा रहा हूं, मैं डेटाफ्रेम श्रृंखला df['date'] से वर्ष या महीने निकालने में सक्षम नहीं हूं।

date Count 
6/30/2010 525 
7/30/2010 136 
8/31/2010 125 
9/30/2010 84 
10/29/2010 4469 

df = pd.read_csv('sample_data.csv',parse_dates=True) 

df['date'] = pd.to_datetime(df['date']) 

df['year'] = df['date'].year 
df['month'] = df['date'].month 

लेकिन यह रिटर्न: अग्रिम में

AttributeError: 'Series' object has no attribute 'year'

धन्यवाद।

अद्यतन:

df = pd.read_csv('sample_data.csv',parse_dates=True) 

df['date'] = pd.to_datetime(df['date']) 

df['year'] = df['date'].dt.year 
df['month'] = df['date'].dt.month 

यह एक ही "AttributeError: 'श्रृंखला' वस्तु कोई विशेषता 'डीटी' है" उत्पन्न करता है:

मैं स्पाइडर 2.3.1 का उपयोग कर रहा साथ

का अनुसरण करें पायथन 3.4.1 64 बिट, लेकिन पांडा को एक नई रिलीज में अपडेट नहीं कर सकता (वर्तमान में 0.14.1 पर)।

conda update pandas 
 

 
conda install pandas==0.15.2 
 

 
conda install -f pandas

कोई भी विचार: निम्न में से प्रत्येक गलत सिंटैक्स त्रुटि उत्पन्न करता है?

+0

साल से कहां से आ रहा है? क्या आप एक पंक्ति तक पहुंचने की कोशिश कर रहे हैं '(df ["date"] [0] .year'? –

+0

मेरे पास तिथियों और अन्य कॉलम के साथ एक सीएसवी फ़ाइल है जो सभी एसक्यूएल से स्ट्रिंग डेटा के रूप में बाहर आई है। नया साल और महीना बनाने की कोशिश कर रहा है समूहकरण के लिए उपयोग करने के लिए कॉलम। सीएसवी में ~ 5000 पंक्तियां हैं। – MJS

+0

हां लेकिन 'df [" date "]' 'pandas.core.series.Series 'ऑब्जेक्ट है।' df ['date'] क्या होना चाहिए। वर्ष' होना चाहिए? –

उत्तर

35

आप पांडा के हाल के एक-ish संस्करण आप कर सकते हैं चला रहे हैं तो डेटाटाइम घटकों तक पहुंचने के लिए डेटाटाइम विशेषता dt का उपयोग करें:

In [6]: 

df['date'] = pd.to_datetime(df['date']) 
df['year'], df['month'] = df['date'].dt.year, df['date'].dt.month 
df 
Out[6]: 
     date Count year month 
0 2010-06-30 525 2010  6 
1 2010-07-30 136 2010  7 
2 2010-08-31 125 2010  8 
3 2010-09-30  84 2010  9 
4 2010-10-29 4469 2010  10 

संपादित

ऐसा लगता है कि आप जिस स्थिति में निम्नलिखित काम करेगा पांडा के एक पुराने संस्करण चला रहे हैं:

In [18]: 

df['date'] = pd.to_datetime(df['date']) 
df['year'], df['month'] = df['date'].apply(lambda x: x.year), df['date'].apply(lambda x: x.month) 
df 
Out[18]: 
     date Count year month 
0 2010-06-30 525 2010  6 
1 2010-07-30 136 2010  7 
2 2010-08-31 125 2010  8 
3 2010-09-30  84 2010  9 
4 2010-10-29 4469 2010  10 

के बारे में कारण है कि यह एक में इस पार्स नहीं किया read_csv में डेटाटाइम आपको अपने कॉलम की सामान्य स्थिति ([0]) पारित करने की आवश्यकता है क्योंकि True यह कॉलम [1,2,3] को पार्स करने का प्रयास करता है docs

In [20]: 

t="""date Count 
6/30/2010 525 
7/30/2010 136 
8/31/2010 125 
9/30/2010 84 
10/29/2010 4469""" 
df = pd.read_csv(io.StringIO(t), sep='\s+', parse_dates=[0]) 
df.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 5 entries, 0 to 4 
Data columns (total 2 columns): 
date  5 non-null datetime64[ns] 
Count 5 non-null int64 
dtypes: datetime64[ns](1), int64(1) 
memory usage: 120.0 bytes 

तो अगर आप read_csv को परम parse_dates=[0] पारित वहाँ लोड हो रहा है के बाद 'तिथि' कॉलम पर to_datetime कॉल करने के लिए किसी भी आवश्यकता नहीं होनी चाहिए।

+0

एड का उपयोग कर रहे हैं - आप सही थे, मैं 0.14.1 पर हूं। क्षमा करें मैं अपडेट करने का प्रयास करूंगा। – MJS

+0

मेरे अपडेट आपके संस्करण पर भी काम करना चाहिए, n 'read_csv'' के लिए 'parse_dates = [0]' ot डेटा स्ट्रिंग्स को डेटाटाइम ऑब्जेक्ट्स में सही ढंग से पार्स करेगा, इसलिए आपको अतिरिक्त 'to_datetime' कॉल – EdChum

6

यह काम करता है:

df['date'].dt.year 

अब:

df['year'] = df['date'].dt.year 
df['month'] = df['date'].dt.month 

इस डेटा फ्रेम देता है:

 date Count year month 
0 2010-06-30 525 2010  6 
1 2010-07-30 136 2010  7 
2 2010-08-31 125 2010  8 
3 2010-09-30  84 2010  9 
4 2010-10-29 4469 2010  10 
1

क्या मेरे लिए काम किया नवीनतम संस्करण के लिए पांडा उन्नयन किया गया था:

कमांड लाइन से कार्य करें:

conda update pandas 
-1
20010101 
20010101 
20010201 
20010201 
20011121 
20011121 
20011221 

मैं तिथियों का एक 55k पंक्तियों है, मैं निकालने और की साजिश नंबर करने की जरूरत है महीने, सप्ताह और उदाहरण के लिए दिन

Feb-2001 4 
Jul-2002 3 
Nov-2014 7 

नीचे कोड X- अक्ष पर मुझे केवल 12 महीने दे रहा है, मैं क्या 180 महीने (2001 से 2015) की आवश्यकता है

import pandas as pd 
import matplotlib.pyplot as plt 
from datetime import datetime 
df = pd.read_csv('rr.csv') 
df['COLLISION_DATE'] = pd.to_datetime(df['COLLISION_DATE'],format='%Y%m%d') 
df['week'], df['month'], df['year'],df['day'] = df['COLLISION_DATE'].dt.week, df['COLLISION_DATE'].dt.month, df['COLLISION_DATE'].dt.year,df['COLLISION_DATE'].dt.day 
answer = df.groupby('month').size().to_frame('Number of Accidents') 
answer.plot.line() 
plt.show() 
+0

की आवश्यकता नहीं है कृपया इसे किसी अन्य के उत्तर के बजाय एक प्रश्न के रूप में पोस्ट करें सवाल। –

संबंधित मुद्दे