在python中删除日期列中的字符串

在python中删除日期列中的字符串,python,pandas,Python,Pandas,我有一个数据框,其中不同的字符串位于日期列中。我的示例数据框如下所示: 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"] Start Finish

我有一个数据框,其中不同的字符串位于日期列中。我的示例数据框如下所示:

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"]

Start              Finish          x1   X2
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

现在,我想删除日期列中的字符串。我想要一个通用的解决方案,以删除附加在start和finish列中的任何字符串。有谁能帮我解决这个问题吗

将正则表达式与
提取
方法结合使用

df.Start = df.Start.str.extract('([0-9]+/[0-9]+/[0-9]+)')
df.Finish = df.Finish.str.extract('([0-9]+/[0-9]+/[0-9]+)')

df.head()

#   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

若日期将出现在开始中,您还可以尝试在空间上拆分并提取第一个元素

In [103]: def extract_date(x):
     ...:     return x.split(" ")[0]
     ...:

In [104]: extract_date("1/5/2020 Yes")
Out[104]: '1/5/2020'

In [105]: df['Start'] = df['Start'].apply(extract_date)

In [106]: df['Finish'] = df['Finish'].apply(extract_date)

In [107]: df
Out[107]:
      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
基于@phillyclause89建议

df['Start'] = df['Start'].str.split(" ").str[0]
df['Finish'] = df['Finish'].str.split(" ").str[0]

我想我们可以试试
dateutil

import dateutil.parser as dparser
df.Start.apply(dparser.parse,fuzzy=True)
0   2020-01-05
1   2020-01-08
2   2020-08-09
Name: Start, dtype: datetime64[ns]

另一种方法是使用正则表达式:

df.Start = df.Start.str.replace(r'[a-zA-Z]','').str.strip()
df.Finish = df.Finish.str.replace(r'[a-zA-Z]','').str.strip()

    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

这有点迂回,但这里有一个仅使用panndas运行它的示例

df2 = pd.concat([df, df['Start'].str.split(' ', expand=True)], axis=1).drop('Start', axis=1)
df2.rename(columns={0:'Start', 1:'del_1'}, inplace=True)
df3 = pd.concat([df2, df2['Finish'].str.split(' ', expand=True)], axis=1).drop('Finish', axis=1)
df3.rename(columns={0:'Finish', 1:'del_2'}, inplace=True)
df3 = df3.drop(['del_1','del_2'], axis=1)
df3 = df3.iloc[:,[3,2,0,1]]

到底是什么问题?你试过什么,做过什么研究吗?这也太宽泛了。请看。
df2 = pd.concat([df, df['Start'].str.split(' ', expand=True)], axis=1).drop('Start', axis=1)
df2.rename(columns={0:'Start', 1:'del_1'}, inplace=True)
df3 = pd.concat([df2, df2['Finish'].str.split(' ', expand=True)], axis=1).drop('Finish', axis=1)
df3.rename(columns={0:'Finish', 1:'del_2'}, inplace=True)
df3 = df3.drop(['del_1','del_2'], axis=1)
df3 = df3.iloc[:,[3,2,0,1]]