首页 > 解决方案 > 从 Python 中的 year-mm-dd 行中切片年份

问题描述

我正在尝试在 pandas 数据框中切片一个大型对象类型列。此列中的所有日期均采用“year-mm-dd”格式,我想首先将其替换为“year”值,然后将其转换为数字列。

我尝试执行以下操作:

for i in range(len(df.index)):
    df.age[i]=df.age[i][:4]

我直接收到警告和这样的错误:

/home/nbuser/anaconda3_501/lib/python3.6/site-packages/ipykernel/__main__.py:2: 
SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas- 
docs/stable/indexing.html#indexing-view-versus-copy
from ipykernel import kernelapp as app
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-262-b01a66467d00> in <module>()
  1 for i in range(len(df.index)):
 ----> 2     df.age[i]=df.age[i][:4]

 IndexError: invalid index to scalar variable.

如果它有效,我想做的是然后使用以下方法将此列从对象转换为数字列:

df['age'] = pd.to_numeric(df['age'])

通过放置 .to_dict 提示符,我得到:

输入:df['age'].to_dict() 输出:{0: '1966-04-08', 1: '1965-05-14', 2: '1965-08-12', 3: '1968- 02-15', 4: '1968-08-08', ...} 我删掉了剩下的,因为有超过 16000 个值

另外,当我得到 dtype 时,我得到: 输入:df['age'].dtype 输出:dtype('O')

预先感谢您的帮助!

标签: pythonstringpandasdataframeslice

解决方案


您可以尝试以下两种方法之一:

df['age'] = df['age'].astype(str).str.split('-').str[0].astype(int)
df['age'] = df['age'].astype(str).str[:4].astype(int)

推荐阅读