python - 使用 pandas DateTimeIndex 提取年份但出现错误

标签 python date pandas

我正在使用 pandas 版本 0.16.2。我想提取日期列的年份和月份。

我读取了数据

df = pd.read_csv(raw_data.csv,
        parse_dates=['EOM_DEFAULT_DATE','RESOLUTION_DATE'], low_memory=False)

“EOM_DEFAULT_DATE”看起来像:

    0    31-JAN-07 12.00.00.000000000 AM
    1    31-JAN-07 12.00.00.000000000 AM
    Name: EOM_DEFAULT_DATE, dtype: object

“解决日期”如下所示:

    0   2008-03-31
    1   2008-03-31
    Name: RESOLUTION_DATE, dtype: datetime64[ns]

具体来说,我想以这种方式提取年份,但出现此错误:

      df['YEAR']=pd.DatetimeIndex(df['RESOLUTION_DATE']).year

      --- 
      A value is trying to be set on a copy of a slice from a DataFrame.

      Try using .loc[row_indexer,col_indexer] = value instead

此外,我在尝试提取月份时遇到错误:

      df['MNTH']=pd.DatetimeIndex(df['EOM_DEFAULT_DATE']).month

      ---
      File "<ipython-input-61-d7aec9a17a8f>", line 1, in <module>

      File "C:\Continuum\Anaconda\lib\site-packages\pandas\util\decorators.py", line 88, in wrapper
return func(*args, **kwargs)

      File "C:\Continuum\Anaconda\lib\site-packages\pandas\tseries\index.py", line 292, in __new__
yearfirst=yearfirst)

      File "C:\Continuum\Anaconda\lib\site-packages\pandas\tseries\index.py", line 1936, in _str_to_dt_array
data = _algos.arrmap_object(arr, parser)

      File "pandas\src\generated.pyx", line 2295, in pandas.algos.arrmap_object (pandas\algos.c:77984)

      File "C:\Continuum\Anaconda\lib\site-packages\pandas\tseries\index.py", line 1932, in parser
yearfirst=yearfirst)

      File "C:\Continuum\Anaconda\lib\site-packages\pandas\tseries\tools.py", line 494, in parse_time_string
raise DateParseError(e)

      DateParseError: unknown string format

使用这个确切的代码,我知道其他人可以很好地运行代码,并提取年份和月份。我错过了什么?

最佳答案

您可以使用 .dt 访问器获取 pd.Series 的年份和月份,其值为 datetime64

df['YEAR'] = df['RESOLUTION_DATE'].dt.year 

要解析日期,您需要提供日期时间格式。

dt_str = '31-JAN-07 12.00.00.000000000 AM'

fmt = '%d-%b-%y %H.%M.%S.%f %p'
pd.to_datetime(dt_str, format=fmt)

#output: Timestamp('2007-01-31 12:00:00')

也许在读取 csv 时尝试不解析日期,因为您有两个日期列,并且它们具有不同的格式。只需读入原始字符串即可。然后将字符串转换为 pandas 中的日期时间对象。

df['EOM_DEFAULT_DATE'] = pd.to_datetime(df['EOM_DEFAULT_DATE'], format='%d-%b-%y %H.%M.%S.%f %p')
df['RESOLUTION_DATE'] = pd.to_datetime(df['RESOLUTION_DATE'])

关于python - 使用 pandas DateTimeIndex 提取年份但出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797249/

相关文章:

python - 如何从 SymPy 符号表达式中删除 (1) 系数?

具有离散颜色图的 Python 2-D 直方图

python - 平均 Python Pandas 日期格式

.net - 如何验证路径(字符串)是否包含 C# .NET 中可变时间格式的日期?

python - 从 pandas groupby 获取独特的值(value)记录

python - Networkx 没有从邻接矩阵返回漂亮的图

python - 分而治之。查找数组中的大多数元素

android - 日期变量自动获取到 1970 年的年份。它必须是 2015 年

python - 如何以自适应间隔对 Pandas 中的偏斜数据进行分组

python - 如何从已知的关联中创建集群/组?