1
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Biến ngày trong dữ liệu của tôi ở nhiều định dạng như DD/mm/yyyy d/mm/yy dd/m/yyyy 12/8/2017 27/08/17 8/9/2017 10/9/2017 15/09/ 17 ..
Tôi cần thay đổi nhiều định dạng này thành một định dạng duy nhất như dd/mm/yyyy
Đã thử tạo chức năng phân tích cú pháp
def parse_date(date): if date == '': return None else: return dt.strptime(date, '%d/%m/%y').date()Và khi tôi áp dụng chức năng này vào bộ dữ liệu của mình, nó đã ném cho tôi lỗi sau ..
"ValueError Traceback (cuộc gọi gần đây nhất)
Dữ liệu không được chuyển đổi vẫn còn là giá trị lỗi: Dữ liệu chưa được chuyển đổi vẫn còn: 17 "
Làm thế nào tôi có thể giải quyết dữ liệu không được chuyển đổi vẫn còn lỗi?
Đã hỏi ngày 22 tháng 1 năm 2018 lúc 14:56Jan 22, 2018 at 14:56
5
Bạn có thể sử dụng mô -đun DateUtil để làm điều nàydateutil module to do this
import dateutil.parser as dparser a = ["12/8/2017", "27/08/17", "8/9/2017", "10/9/2017", "15/09/17"] for i in a: print dparser.parse(i,fuzzy=True).date()Result:
2017-12-08 2017-08-27 2017-08-09 2017-10-09 2017-09-15Đã trả lời ngày 22 tháng 1 năm 2018 lúc 15:03Jan 22, 2018 at 15:03
RakeshrakeshRakesh
79,6K17 Huy hiệu vàng71 Huy hiệu bạc109 Huy hiệu đồng17 gold badges71 silver badges109 bronze badges
0
Điều này là do %y mong đợi một số 4 chữ số.
Để bao gồm nhiều định dạng ngày, bạn có thể xem thư viện ____10. (Tài liệu)
Nếu không, bạn sẽ phải tự mình đi qua các loại có thể hoặc tự mở rộng ngày. Nếu bạn chắc chắn rằng bạn chỉ cần kéo dài phần năm, bạn có thể làm một cái gì đó như thế này trước khi cung cấp chuỗi cho trình phân tích cú pháp:
date_parts = date.split('/') if len(date_parts[2]) == 2: date_parts[2] = "20" + date_parts[2] date = '/'.join(date_parts)Tôi nghĩ rằng sử dụng thư viện import dateutil.parser as dparser a = ["12/8/2017", "27/08/17", "8/9/2017", "10/9/2017", "15/09/17"] for i in a: print dparser.parse(i,fuzzy=True).date() 0 là cách để đi, vì nó có thể mở rộng hơn.
Đã trả lời ngày 22 tháng 1 năm 2018 lúc 15:05Jan 22, 2018 at 15:05
3
Một cách tiếp cận cơ bản là phân chia các chuỗi trên các dấu gạch chéo, và sau đó tham gia lại chúng với số lượng chính xác. Một cách tiếp cận đơn giản:
date = "12/8/2017" parts = date.split("/") print(parts) # ['12', '8', '2017'] if len(parts[0]) == 1: parts[0] = "0" + parts[0] if len(parts[1]) == 1: parts[1] = "0" + parts[1] if len(parts[2]) == 2: parts[2] = "20" + parts[2] newDate = "/".join(parts) # or newDate = parts[0] + "/" + parts[1] + "/" + parts[2] print(newDate) # 12/08/2017Sau đó, bạn có một định dạng ngày nhất quán trong suốt. (Một kiểm tra bổ sung là bắt buộc nếu ngày của bạn kéo dài vào thế kỷ trước.)
Tôi sẽ kiểm tra điều này trước và xem xét các cách tiếp cận của các câu trả lời khác nếu điều này không có hiệu suất.
Đã trả lời ngày 22 tháng 1 năm 2018 lúc 15:12Jan 22, 2018 at 15:12
Andy Gandy gAndy G
18,9K5 Huy hiệu vàng45 Huy hiệu bạc67 Huy hiệu Đồng5 gold badges45 silver badges67 bronze badges
1
Bạn có thể sử dụng pd.to_dateTime (dữ liệu, 'infer_dateTime_format = true'):
Tạo DataFrame với dữ liệu của bạn:
data = {'dates': ['2020-11-09 00:00:48' ,'2020-11-09 00:00:48', '2020-11-09 00:00:48' ,'2020-11-09 00:00:48', '2020-11-09 00:00:48' ,'2020-08-25', '2020-08-25' ,'2017-08-25', '2018-08-25' ,'2020-08-25', '25.08.2020' ,'25.08.2020', '25.08.2017' ,'25.08.2018', '25.08.2020']} mini_df = pd.DataFrame(data)Chuyển đổi nó thành cùng một định dạng DateTime.
mini_df['dates'] = pd.to_datetime(mini_df['dates'], infer_datetime_format=True)Kết quả DataFrame:
Trong bài viết này, chúng tôi sẽ chỉ ra cách chuyển đổi các định dạng ngày đầu vào khác nhau thành một định dạng ngày đầu ra duy nhất.
Định dạng ngày đã cho:
Trường hợp 1: 2019 2019-3-6 Vụ 2
Case 2: “Wed, 6, March, 19”
Case 3: “Wednesday, 6, March, 9”
Case 4: “6-3-2019”
Định dạng ngày đầu ra phải là: 3/6/2019
// Importing datetime import datetime // First type of Date and it's format inputDate0 = "2019-3-6" DateFormat0 = "%Y-%m-%d" // Second type of Date and it's format inputDate1 = "Wed, 6, March, 19" DateFormat1 = "%a, %d, %B, %y" // Third type of Date and it's format inputDate2 = "Wednesday, 6, March, 19" DateFormat2 = "%A, %d, %B, %y" // Fourth type of Date and it's format inputDate3 = ""6-3-2019"" DateFormat3 = "%d-%m-%Y" // Out date format outPutDateFormat = "%m/%d/%y" // Converting input date to Date type object date0 = datetime.datetime.strptime(inputDate0 , DateFormat0 ) date1 = datetime.datetime.strptime(inputDate1 , DateFormat1 ) date2 = datetime.datetime.strptime(inputDate2 , DateFormat2 ) date3 = datetime.datetime.strptime(inputDate3 , DateFormat3 ) // Print different combination of dates as per output format print datetime.date.strftime(date0, outPutDateFormat ) print datetime.date.strftime(date1, outPutDateFormat ) print datetime.date.strftime(date2, outPutDateFormat ) print datetime.date.strftime(date3, outPutDateFormat )Đầu ra sẽ như thế này
6/3/2019 6/3/2019 6/3/2019 6/3/2019Vui lòng kiểm tra tài liệu Python chính thức này để biết thêm thông tin:
//docs.python.org/2/library/datetime.html