我有一个熊猫数据框,其中的日期列格式为“ 2016-05-03”,这些是字符串btw。我需要将它们从字符串转换为int并在连字符('-')处拆分,仅提取年份,以便[0]。
这是我尝试将字符串转换为整数的方法:
tyc.startDate = tyc.startDate.astype(np.int64)
但是它正在返回并且出错:
ValueError:以10为基数的int()的无效文字:'2015-06-01'
这是我为拆分所做的:
tyc.startDate.str.split('-')[0]
和
tyc.startDate.str.split('-', [0])
但这也不起作用,它正在拆分并以这种形式返回该列中所有行的列表:['2015','06','01'],我想将这一年拆分!
我敢肯定有一种简单的方法可以将其转换为int并在位置0处拆分为('-'),然后将其作为新列放入df中,请帮忙!
我相信您的数据包含NaN
s或不包含日期时间值:
tyc = pd.DataFrame({'startDate':['2016-05-03','2017-05-03', np.nan],
'col':[1,2,3]})
print (tyc)
col startDate
0 1 2016-05-03
1 2 2017-05-03
2 3 NaN
使用str[0]
每一行的第一个返回列表值第一。但是然后出现了问题-有些NaNs
无法转换为int
(设计)-所以输出是浮动的:
print (tyc.startDate.str.split('-').str[0].astype(float))
0 2016.0
1 2017.0
2 NaN
Name: startDate, dtype: float64
另一个解决方案是将datetime转换为datetimeto_datetime
并通过year
以下方式解析year :
print (pd.to_datetime(tyc.startDate, errors='coerce'))
0 2016-05-03
1 2017-05-03
2 NaT
Name: startDate, dtype: datetime64[ns]
print (pd.to_datetime(tyc.startDate, errors='coerce').dt.year)
0 2016.0
1 2017.0
2 NaN
Name: startDate, dtype: float64
解决方案NaN
:
tyc['year'] = pd.to_datetime(tyc.startDate, errors='coerce').dt.year
print (tyc)
col startDate year
0 1 2016-05-03 2016.0
1 2 2017-05-03 2017.0
2 3 NaN NaN
1。
用NaN
s by删除所有行,dropna
然后将其强制转换为int:
tyc = tyc.dropna(subset=['year'])
tyc['year'] = tyc['year'].astype(int)
print (tyc)
col startDate year
0 1 2016-05-03 2016
1 2 2017-05-03 2017
2。
将NaN
s替换为一些int值,例如1
by fillna
,然后将其强制转换为int
:
tyc['year'] = tyc['year'].fillna(1).astype(int)
print (tyc)
col startDate year
0 1 2016-05-03 2016
1 2 2017-05-03 2017
2 3 NaN 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句