如何在python中使用`apply`而不指定数据框的列名?

问题描述 投票:0回答:1

我正在尝试在数据框中使用apply函数,以从日期列中删除字符串。例如,我下面有一个数据框,我想使用Start包从Finishdateutil列中删除字符串,而不指定列名。

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)

有人可以帮我解决这个问题吗?

python pandas dataframe apply python-dateutil
1个回答
2
投票

df[0]访问列named 0,该列不在您的数据框中。您想输入正确的名称,即df['Start']或使用ilocdf.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

0
投票

您不能传递另一个函数的参数来应用不能传递fuzzy=True的情况,相反,您可以像这样使用lambda函数:

df['Start'] = df['Start'].apply(lambda x: dparser.parse(x, fuzzy=True))
© www.soinside.com 2019 - 2024. All rights reserved.