ฉันมีหนึ่งฟิลด์ใน DataFrame แพนด้าที่ถูกอิมพอร์ตเป็นรูปแบบสตริง มันควรจะเป็นตัวแปร datetime ฉันจะแปลงเป็นคอลัมน์วันที่และเวลาแล้วกรองตามวันที่
ตัวอย่าง:
- ชื่อDataFrame : raw_data
- ชื่อคอลัมน์: Mycol
- รูปแบบค่าในคอลัมน์: '05SEP2014: 00: 00: 00.000'
ฉันมีหนึ่งฟิลด์ใน DataFrame แพนด้าที่ถูกอิมพอร์ตเป็นรูปแบบสตริง มันควรจะเป็นตัวแปร datetime ฉันจะแปลงเป็นคอลัมน์วันที่และเวลาแล้วกรองตามวันที่
ตัวอย่าง:
คำตอบ:
ใช้to_datetime
ฟังก์ชั่นระบุรูปแบบเพื่อให้ตรงกับข้อมูลของคุณ
raw_data['Mycol'] = pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')
SettingWithCopyWarning
ใช้ @ darth-behfans stackoverflow.com/a/42773096/4487805
คุณสามารถใช้วิธี DataFrame .apply()
เพื่อทำงานกับค่าใน Mycol:
>>> df = pd.DataFrame(['05SEP2014:00:00:00.000'],columns=['Mycol'])
>>> df
Mycol
0 05SEP2014:00:00:00.000
>>> import datetime as dt
>>> df['Mycol'] = df['Mycol'].apply(lambda x:
dt.datetime.strptime(x,'%d%b%Y:%H:%M:%S.%f'))
>>> df
Mycol
0 2014-09-05
หากคุณมีการแปลงมากกว่าหนึ่งคอลัมน์คุณสามารถทำสิ่งต่อไปนี้:
df[["col1", "col2", "col3"]] = df[["col1", "col2", "col3"]].apply(pd.to_datetime)
raw_data['Mycol'] = pd.to_datetime(raw_data['Mycol'], format='%d%b%Y:%H:%M:%S.%f')
ใช้งานได้ แต่จะส่งผลให้คำเตือน Python ของค่าพยายามที่จะตั้งค่าบนสำเนาของชิ้นจาก DataFrame ลองใช้.loc[row_indexer,col_indexer] = value
แทน
ฉันเดาว่านี่เป็นเพราะการจัดทำดัชนีการผูกมัด
ใช้to_datetime
ฟังก์ชันแพนด้าเพื่อแยกคอลัมน์เป็น DateTime นอกจากนี้โดยใช้infer_datetime_format=True
มันจะตรวจจับรูปแบบโดยอัตโนมัติและแปลงคอลัมน์ที่กล่าวถึงเป็น DateTime
import pandas as pd
raw_data['Mycol'] = pd.to_datetime(raw_data['Mycol'], infer_datetime_format=True)
format
ไม่จำเป็นต้องมีอาร์กิวเมนต์to_datetime
เป็นคนฉลาด ไปข้างหน้าและลองโดยไม่พยายามจับคู่ข้อมูลของคุณ