programing

날짜에서 연도를 추출합니다. df['year'] = df['date'].연도가 작동하지 않습니다.

yellowcard 2023. 9. 17. 12:15
반응형

날짜에서 연도를 추출합니다. 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

반응형