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