我有一个数据集,列中有一些日期.
问题是有些日期由 2 个日期组成,例如 2010-2011.
我想删除我所有数据集上的第二个日期,基本上有date = date[:4]
我试过了,但没有用(我的数据集有 61 行):
for i in [0,60]:
df['Date'][i] = df['Date'][i][:4]
目标是通过比较基于此日期选择数据集的行(因此我需要将它们作为整数)。
您可以在一行中完成所有操作,如下所示:
import pandas as pd
#Example data
data = pd.DataFrame()
data['date'] = ['2010', '2010-2011', '2012', '2009-2010']
#Split on '-' and make integer
data['date'] = data['date'].apply(lambda x: x.split('-')[0]).astype('int')
#Print update dataframe
data
也许可以尝试以下方法:
df['Date'] = df['Date'].str.slice(0, 4)
df['Date'] = pd.to_numeric(df['Date'])
请注意,这些操作应用于整个列,而不是对行进行操作,这在使用pandas
时通常被认为是更惯用的,它们有许多有用的库方法来轻松执行类似的转换。
关于您提供的代码还有一点小说明:请记住,[0,60]
的意思是"0
和60
",而我认为您打算写类似range(61)
的东西,生成从0
到包括60
的所有数字
根据经验,尝试使用 python 理解而不是 pandas 实例方法。 熊猫实例方法的示例如下所示df['Date'].str.slice(0, 4)
.在这种情况下,.str
是数据帧df['Date']
的实例方法。而是使用列表推导式,如下所示:
df['Date'] = [i[:4] for i in df['Date']]
如果您想更具体,并根据 2010-2011 之间的破折号进行拆分,请执行以下操作:
df['Date'] = [i.split("-")[0] for i in df['Date']]
要更改数据类型,请执行以下操作:
df['Date'] = df['Date'].astype(int)
但是这不是日期时间格式。它只是一个整数。
>>> date = "2011-2013" #our Input
>>> date.split("-") #split out input using -
['2011', '2013'] #output
>>> date.split("-")[0] #get the first date 'string'
'2011' #output
>>> int(date.split("-")[0]) #get the first date 'integer'
2011 #output
>>>