我正在尝试在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')
提前感谢您的帮助!
答案 0 :(得分:2)
您可以尝试以下2种方法之一:
df['age'] = df['age'].astype(str).str.split('-').str[0].astype(int)
df['age'] = df['age'].astype(str).str[:4].astype(int)
答案 1 :(得分:1)
如果您的日期在“年龄”列中:
import datetime
df.loc[:,'age'] = df.loc[:,'age'].map(lambda x: datetime.datetime.strptime(str(x),'%Y-%m-%d').year)