Python 在数据帧中操纵时间范围
需要清理csv导入,这给了我一个时间范围(以字符串形式)。代码在底部;我目前在df上使用正则表达式和Python 在数据帧中操纵时间范围,python,python-3.x,pandas,dataframe,date-range,Python,Python 3.x,Pandas,Dataframe,Date Range,需要清理csv导入,这给了我一个时间范围(以字符串形式)。代码在底部;我目前在df上使用正则表达式和replace()来转换其他字符。只是不知道如何: 选择当前的24小时格式编号并添加:00 如何选择12小时格式的数字,并将其设置为24小时 输入(来自csv导入): 到目前为止,我已经得到了它的外观(删除空格、AM/PM、用冒号替换点): 但是,我希望它看起来像这样('HH:MM-HH:MM'格式): 我的代码是: data = pd.read_csv('test.csv') data.brea
replace()
来转换其他字符。只是不知道如何:
data = pd.read_csv('test.csv')
data.break_notes = data.break_notes.str.replace(r'([P].|[ ])', '').str.strip()
data.break_notes = data.break_notes.str.replace(r'([.])', ':').str.strip()
以下是根据您请求的输入数据所需的转换器功能
convert\u条目
获取完整的值条目,在破折号上拆分,并将其结果传递给convert\u single
,因为一个条目的两个半部分都可以单独转换。每次转换后,它都会将它们合并为一个破折号
convert\u single
使用正则表达式搜索时间字符串中的重要部分。
它以一些数字(\d+
(表示小时)开始,然后可选地是一个点或冒号,以及更多的数字(\d+)(表示分钟)。然后选择AM或PM(AM | PM)
(在这种情况下只有PM相关)
以下是根据您请求的输入数据所需的转换器功能
convert\u条目
获取完整的值条目,在破折号上拆分,并将其结果传递给convert\u single
,因为一个条目的两个半部分都可以单独转换。每次转换后,它都会将它们合并为一个破折号
convert\u single
使用正则表达式搜索时间字符串中的重要部分。
它以一些数字(\d+
(表示小时)开始,然后可选地是一个点或冒号,以及更多的数字(\d+)(表示分钟)。然后选择AM或PM(AM | PM)
(在这种情况下只有PM相关)
请用文字说明您的问题,不要只显示数据并说“我的输入看起来像这样”和“我希望它看起来像这样”。只是不知道如何选择当前的24小时格式数字并添加:00。其次,如何选择12小时格式的数字,并使其成为24小时。我不知道该怎么办。任何帮助都将是巨大的。pandas的用途正是:表示一系列时间,并且它支持比较(您的字符串不支持)。你想要那个而不是字符串吗?此外,还可以使用转换自定义日期/时间格式(如果它们位于单个列中)
between_time()
需要附加一个日期(今天?具体日期?日期范围?)我有一个24小时格式的时间开始和结束时间表。进入的break notes表总是各种时间的混合。然后,我使用格式化的中断笔记通过删除中断时间来获取开始和结束之间的总时间。@Saritus的答案很好,但它的比喻是使用for循环。有没有办法在数据帧上使用他的方法并将其保持为字符串。请用文字陈述您的问题,不要只显示数据并说“我的输入看起来像这样”和“我希望它看起来像这样”。只是不知道如何选择当前的24小时格式数字并添加:00。其次,如何选择12小时格式的数字,并使其成为24小时。我不知道该怎么办。任何帮助都将是巨大的。pandas的用途正是:表示一系列时间,并且它支持比较(您的字符串不支持)。你想要那个而不是字符串吗?此外,还可以使用转换自定义日期/时间格式(如果它们位于单个列中)between_time()
需要附加一个日期(今天?具体日期?日期范围?)我有一个24小时格式的时间开始和结束时间表。进入的break notes表总是各种时间的混合。然后,我使用格式化的中断笔记,通过删除中断时间来获得开始和结束之间的总时间。@Saritus的答案很好,但它的比喻是使用for循环。是否有办法在数据帧上使用他的方法并将其作为字符串保留。
break_notes
0 15-18
1 18:30-19:00
2 4-5
3 3-4
4 4-4:10
5 15-17
6 11-13
break_notes
0 15:00-18:00
1 18:30-19:00
2 16:00-17:00
3 15:00-16:00
4 16:00-16:10
5 15:00-17:00
6 11:00-13:00
data = pd.read_csv('test.csv')
data.break_notes = data.break_notes.str.replace(r'([P].|[ ])', '').str.strip()
data.break_notes = data.break_notes.str.replace(r'([.])', ':').str.strip()
import re
def convert_single(s):
m = re.search(pattern="(\d+)[.:]?(\d+)?(AM|PM)?", string=s)
hours = m.group(1)
minutes = m.group(2) or "00"
if m.group(3) == "PM":
hours = str(int(hours) + 12)
return hours.zfill(2) + ":" + minutes.zfill(2)
def convert_entry(value):
start, end = value.split("-")
start = convert_single(start)
end = convert_single(end)
return "-".join((start, end))
values = ["15-18", "18.30-19.00", "4PM-5PM", "3-4", "4-4.10PM", "15 - 17", "11 - 13"]
for value in values:
cvalue = convert_entry(value)
print(cvalue)