Tôi cần xử lý một lượng lớn tệp CSV trong đó dấu thời gian luôn là chuỗi đại diện cho dấu thời gian unix tính bằng mili giây. Tôi không thể tìm thấy một phương pháp nào để sửa đổi các cột này một cách hiệu quả.Pandas chuyển đổi hàng có dấu thời gian unix (tính bằng mili giây) thành datetime
Đây là những gì tôi đã đưa ra, tuy nhiên điều này tất nhiên chỉ sao chép cột và tôi phải bằng cách nào đó đặt nó trở lại tập dữ liệu gốc. Tôi chắc rằng nó có thể được thực hiện khi tạo DataFrame
?
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO
import pandas as pd
data = 'RUN,UNIXTIME,VALUE\n1,1447160702320,10\n2,1447160702364,20\n3,1447160722364,42'
df = pd.read_csv(StringIO(data))
convert = lambda x: datetime.datetime.fromtimestamp(x/1e3)
converted_df = df['UNIXTIME'].apply(convert)
này sẽ chọn cột 'UNIXTIME' và thay đổi nó từ
0 1447160702320
1 1447160702364
2 1447160722364
Name: UNIXTIME, dtype: int64
vào này
0 2015-11-10 14:05:02.320
1 2015-11-10 14:05:02.364
2 2015-11-10 14:05:22.364
Name: UNIXTIME, dtype: datetime64[ns]
Tuy nhiên, tôi muốn sử dụng cái gì đó như pd.apply()
để có được toàn bộ dữ liệu được trả về với cột được chuyển đổi hoặc như tôi đã viết, chỉ cần tạo các datetimes khi tạo DataFrame từ CSV.
Ah, tôi hoàn toàn bỏ qua tham số 'đơn vị' đó, cảm ơn, đó là một thông số tốt! Tôi sẽ thực hiện một yêu cầu kéo để bao gồm trong '.read_csv' quá thông qua parse_dates. – tamasgal
Điều này có thể dẫn đến sai thời gian do vấn đề múi giờ. –
@PengjuZhao câu hỏi của OP không đề cập đến múi giờ, vì câu trả lời của Teudimundo giải quyết rằng – EdChum