날짜에서 연도를 추출합니다. df['year'] = df['date'].연도가 작동하지 않습니다.
다음을 통해 데이터 프레임을 가져옵니다.read_csv
, 하지만 어떤 이유에서인지 연식에서 연도나 월을 추출할 수 없습니다.df['date']
, 그렇게 해보는 것이 좋습니다.AttributeError: 'Series' object has no attribute 'year'
:
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
업데이트: 솔루션을 사용해 볼 때df['date'].dt
팬더 버전 0.14.1에서 "AttributeError: 'Series' 개체에 'dt' 속성이 없습니다"라는 메시지가 나타납니다.
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
반복적으로 보이는 이 질문에 대해 죄송합니다. 답변이 제가 골머리가 된 것처럼 느껴질 것이라 기대합니다.하지만 SO에 대한 비슷한 질문에 대한 답변을 사용한 것은 운이 없었습니다.
후속 조치: Anaconda 환경에서 팬더 0.14.1을 최신 릴리스로 업데이트할 수 없는 것 같습니다. 아래의 각 시도에서 잘못된 구문 오류가 발생합니다.저는 파이썬 3.4.164비트를 사용하고 있습니다.
conda update pandas
conda install pandas==0.15.2
conda install -f pandas
무슨 생각 있어요?
최신 버전의 팬더를 실행하는 경우 datetime accessor를 사용하여 datetime 구성 요소에 액세스할 수 있습니다.
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]
서류를 보다
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
그래서 만약 당신이 param을 통과한다면parse_dates=[0]
로.read_csv
전화할 필요가 없을 겁니다to_datetime
로드 후 '날짜' 열에 표시됩니다.
작동 내용:
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
사용시기dt
악세사리
혼동의 일반적인 원인은 사용 시기와 사용 시기를 중심으로 발생합니다.
전자는 개체의 속성이고 후자는 개체의 속성입니다.다음과 같은 데이터 프레임을 고려합니다.
df = pd.DataFrame({'Dates': pd.to_datetime(['2018-01-01', '2018-10-20', '2018-12-25'])},
index=pd.to_datetime(['2000-01-01', '2000-01-02', '2000-01-03']))
급수와 지수의 정의는 비슷해 보이지만,pd.DataFrame
생성자는 이들을 다양한 유형으로 변환합니다.
type(df.index) # pandas.tseries.index.DatetimeIndex
type(df['Dates']) # pandas.core.series.Series
그DatetimeIndex
대상은 직접적인year
속성을 지정하는 반면에Series
개체는 반드시 사용해야 합니다.dt
접근자마찬가지로month
:
df.index.month # array([1, 1, 1])
df['Dates'].dt.month.values # array([ 1, 10, 12], dtype=int64)
주목할 만한 미묘하지만 중요한 차이점은df.index.month
는 NumPy 배열을 제공합니다.df['Dates'].dt.month
팬더 시리즈를 제공합니다.위에서 NumPy 배열 표현을 추출하는 데 사용합니다.
이미 답변하기에는 너무 늦었을 수도 있지만 데이터를 로드하는 동안 이미 날짜를 파싱했기 때문에 이 작업을 수행하면 날짜를 얻을 수 있습니다.
df['date'] = pd.DatetimeIndex(df['date']).year
팬더를 최신 버전으로 업그레이드하는 것이 효과적이었습니다.
명령줄에서 다음 작업을 수행합니다.
conda update pandas
언급URL : https://stackoverflow.com/questions/30405413/pandas-extract-year-from-datetime-dfyear-dfdate-year-is-not-working
'programing' 카테고리의 다른 글
현재 로그인한 사용자를 제외한 모든 사용자를 수준 높은 웅변으로 가져옵니다. (0) | 2023.09.27 |
---|---|
ODP.NET Managed - 요청한 항목을 찾을 수 없습니다.넷 프레임워크 데이터 프로바이더 (0) | 2023.09.17 |
탐색 드로어에서 메뉴 항목의 텍스트 색상 변경 (0) | 2023.09.17 |
XML Android 권한 목록 전체 (0) | 2023.09.17 |
printf의 가변 크기 패딩 (0) | 2023.09.17 |