我正在尝试在数据框中使用apply
函数,以从日期列中删除字符串。例如,我下面有一个数据框,我想使用Start
包从Finish
和dateutil
列中删除字符串,而不指定列名。
df=[["1/5/2020 Yes", "5/9/2020 String",2,6],["1/8/2020 No","5/8/2020 sponge",8,9],["8/9/2020 Spine","5/8/2020 spike",8,9]]
df=pd.DataFrame(df)
df.columns=["Start","Finish","x1","x2"]
这是我的审判,但没有用,并抛出KeyError Traceback (most recent call last)
df[0] = df[0].apply(dparser.parse,fuzzy=True)
df[1] = df[1].apply(dparser.parse,fuzzy=True)
有人可以帮我解决这个问题吗?
df[0]
访问列named 0
,该列不在您的数据框中。您想输入正确的名称,即df['Start']
或使用iloc
:df.iloc[:,0]
。
另外,提取日期的另一种方法是使用regex
模式,例如:
for i in range(2):
df.iloc[:,i] = df.iloc[:,i].str.extract('^(\S+)')[0]
输出:
Start Finish x1 x2
0 1/5/2020 5/9/2020 2 6
1 1/8/2020 5/8/2020 8 9
2 8/9/2020 5/8/2020 8 9
您不能传递另一个函数的参数来应用不能传递fuzzy=True
的情况,相反,您可以像这样使用lambda函数:
df['Start'] = df['Start'].apply(lambda x: dparser.parse(x, fuzzy=True))