2016-11-21 34 views
7

Tôi nghĩ rằng điều này đã là một thất bại của gấu trúc, có một loạt gấu trúc (v.18.1 và 19 quá), nếu tôi chỉ định một ngày cho Series, lần đầu tiên nó được thêm vào như int (lỗi), lần thứ hai nó được thêm vào như datetime (đúng), tôi không thể hiểu được lý do.Python Pandas Dòng lỗi datetime

Ví dụ với mã này:

import datetime as dt 
import pandas as pd 
series = pd.Series(list('abc')) 
date = dt.datetime(2016, 10, 30, 0, 0) 
series["Date_column"] =date 
print("The date is {} and the type is {}".format(series["Date_column"], type(series["Date_column"]))) 
series["Date_column"] =date 
print("The date is {} and the type is {}".format(series["Date_column"], type(series["Date_column"]))) 

Đầu ra là:

The date is 1477785600000000000 and the type is <class 'int'> 
The date is 2016-10-30 00:00:00 and the type is <class 'datetime.datetime'> 

Như bạn có thể thấy, lần đầu tiên nó luôn đặt giá trị như int thay vì datetime.

ai đó có thể giúp tôi ?, Cảm ơn bạn rất nhiều trước, Javi.

+1

Tôi không biết nguyên nhân gây ra hành vi này, nhưng bạn nên cẩn thận khi thêm ngày vào cột chuỗi. Bạn biết rằng bạn đang thêm một hàng, chứ không phải một cột, phải không? – IanS

+1

Điều này có mùi giống như một lỗi đối với tôi, 'Series' hỗ trợ dtypes hỗn hợp để có vẻ như datetime đang bị ép buộc int trên nhiệm vụ ban đầu nhưng sau đó ghi đè lên cùng một vị trí nhãn chỉ mục mang lại hành vi mong đợi. Tôi sẽ đăng một vấn đề lên [github] (https://github.com/pandas-dev/pandas/issues) – EdChum

+0

Cảm ơn bạn rất nhiều EdChum – bracana

Trả lời

0

Lý do cho điều này là chuỗi là loại 'đối tượng' và các cột của một DataFrame gấu trúc (hoặc một Series) là đồng nhất loại. Bạn có thể kiểm tra điều này với dtype (hoặc DataFrame.dtypes):

series = pd.Series(list('abc')) 
series 
Out[3]: 
0 a 
1 b 
2 c 
dtype: object 

In [15]: date = dt.datetime(2016, 10, 30, 0, 0) 
date 
Out[15]: datetime.datetime(2016, 10, 30, 0, 0) 

In [18]: print(date) 
2016-10-30 00:00:00 

In [17]: type(date) 
Out[17]: datetime.datetime 

In [19]: series["Date_column"] = date 
In [20]: series 

Out[20]: 
0        a 
1        b 
2        c 
Date_column 1477785600000000000 
dtype: object 

In [22]: series.dtype 

Out[22]: dtype('O') 

Chỉ có chung 'đối tượng' dtype có thể chứa bất kỳ đối tượng python (trong trường hợp bạn chèn một đối tượng datetime.datetime vào Series).

Hơn nữa, Pandas Series dựa trên Numpy Arrays, không phải là loại hỗn hợp và đánh bại mục đích sử dụng lợi ích tính toán của Pandas DataFrames và Series hoặc Numpy.

Bạn có thể sử dụng danh sách python() thay thế không? hoặc một DataFrame()?

Các vấn đề liên quan