删除 pandas 数据框中不需要的日期字符的方法
Method to remove unwanted date characters in pandas dataframe
我在 pandas 数据框中收集了一些数据。日期列现在一点用处也没有。
我能够删除带有各种不重要信息的方括号:
df['Date'] = df['Date'].str.replace(r"\(.*\)","")
不过,还是有很多我不想要的信息。
我只需要日期、月份和年份。
请参阅 dataframe[Date]:
的输出示例
1932 年 9 月 14 日14:40
1943 年 9 月 6 日6:06p.m。
1991 年 11 月 15 日大约 16:00 当地时间
1981 年 7 月 9 日 01:47 CST 17:47 UTC
1847 年 5 月 24 日~上午 06:50
我想尝试将月份转换为数字,然后指定接下来说 8 个字符,dd/mm/yyyy,然后删除所有内容。我只是不确定如何将每个月转换为整数,然后删除 8 个字符后的所有内容。此外,考虑到并非所有日期都由 dd 给出,“8 个字符”的方法可能不是最好的。有更好的建议吗?
感谢您的宝贵时间。
我建议使用以下函数尝试将字符串转换为 pd.datetime 对象,如果尝试失败,则切断最后一个单词并重试。
def extract_date(text):
while len(text) > 0:
try:
res = pd.to_datetime(text)
break
except:
text = ' '.join(text.split()[:-1]) # drop the last "word"
else:
return pd.NaT
return res.date()
您可以像这样将函数应用于您的系列:
df['Time'] = df['Time'].apply(extract_date)
但请注意,这并非 100% 可靠,因为过多的元素(与日期无关)可能会出现在您的文本开头。而且,日和月的顺序可能会有所不同,这可能会影响结果。
根据您愿意冒一些错误的风险,这些模式可以正确提取所有给定示例的年、月和日。
year = df['Date'].str.extract(r'\b(\d{4})\b')
month = df['Date'].str.extract(r'([a-zA-Z]+)')
day = df['Date'].str.extract(r'\b(\d{1,2})\b')
我在 pandas 数据框中收集了一些数据。日期列现在一点用处也没有。 我能够删除带有各种不重要信息的方括号:
df['Date'] = df['Date'].str.replace(r"\(.*\)","")
不过,还是有很多我不想要的信息。 我只需要日期、月份和年份。 请参阅 dataframe[Date]:
的输出示例1932 年 9 月 14 日14:40
1943 年 9 月 6 日6:06p.m。
1991 年 11 月 15 日大约 16:00 当地时间
1981 年 7 月 9 日 01:47 CST 17:47 UTC
1847 年 5 月 24 日~上午 06:50
我想尝试将月份转换为数字,然后指定接下来说 8 个字符,dd/mm/yyyy,然后删除所有内容。我只是不确定如何将每个月转换为整数,然后删除 8 个字符后的所有内容。此外,考虑到并非所有日期都由 dd 给出,“8 个字符”的方法可能不是最好的。有更好的建议吗?
感谢您的宝贵时间。
我建议使用以下函数尝试将字符串转换为 pd.datetime 对象,如果尝试失败,则切断最后一个单词并重试。
def extract_date(text):
while len(text) > 0:
try:
res = pd.to_datetime(text)
break
except:
text = ' '.join(text.split()[:-1]) # drop the last "word"
else:
return pd.NaT
return res.date()
您可以像这样将函数应用于您的系列:
df['Time'] = df['Time'].apply(extract_date)
但请注意,这并非 100% 可靠,因为过多的元素(与日期无关)可能会出现在您的文本开头。而且,日和月的顺序可能会有所不同,这可能会影响结果。
根据您愿意冒一些错误的风险,这些模式可以正确提取所有给定示例的年、月和日。
year = df['Date'].str.extract(r'\b(\d{4})\b')
month = df['Date'].str.extract(r'([a-zA-Z]+)')
day = df['Date'].str.extract(r'\b(\d{1,2})\b')