2015-12-23 17 views
5

Tôi có một khung dữ liệu với cột dấu thời gian và cột số. Tôi có thể thêm một hàng mới vào nó nếu cột dấu thời gian là thời gian ngây thơ.Làm cách nào để nối thêm vào một khung dữ liệu với cột dấu thời gian nhận biết múi giờ?

df = pd.DataFrame([[1,2],[3,4]], columns=['timestamp', 'number']) 
df['timestamp']=pd.to_datetime(df['timestamp']) 
df 
#      timestamp number 
# 0 1970-01-01 00:00:00.000000001  2 
# 1 1970-01-01 00:00:00.000000003  4 

df.append(df.loc[0]) 
#      timestamp number 
# 0 1970-01-01 00:00:00.000000001  2 
# 1 1970-01-01 00:00:00.000000003  4 
# 0 1970-01-01 00:00:00.000000001  2 

Nhưng nếu tôi đặt múi giờ cho cột dấu thời gian, sau đó thử thêm hàng mới, tôi gặp lỗi.

df['timestamp']=df['timestamp'].apply(lambda x: x.tz_localize('utc')) 
df 
#        timestamp number 
# 0 1970-01-01 00:00:00.000000001+00:00  2 
# 1 1970-01-01 00:00:00.000000003+00:00  4 
df.append(df.loc[0]) 
# Traceback (most recent call last): 
# File "<stdin>", line 1, in <module> 
# File "/Library/Python/2.7/site-packages/pandas-0.17.1-py2.7-macosx-10.10-intel.egg/pandas/core/frame.py", line 4231, in append 
#  verify_integrity=verify_integrity) 
# File "/Library/Python/2.7/site-packages/pandas-0.17.1-py2.7-macosx-10.10-intel.egg/pandas/tools/merge.py", line 813, in concat 
#  return op.get_result() 
# File "/Library/Python/2.7/site-packages/pandas-0.17.1-py2.7-macosx-10.10-intel.egg/pandas/tools/merge.py", line 995, in get_result 
#  mgrs_indexers, self.new_axes, concat_axis=self.axis, copy=self.copy) 
# File "/Library/Python/2.7/site-packages/pandas-0.17.1-py2.7-macosx-10.10-intel.egg/pandas/core/internals.py", line 4456, in concatenate_block_managers 
#  for placement, join_units in concat_plan] 
# File "/Library/Python/2.7/site-packages/pandas-0.17.1-py2.7-macosx-10.10-intel.egg/pandas/core/internals.py", line 4561, in concatenate_join_units 
#  concat_values = com._concat_compat(to_concat, axis=concat_axis) 
# File "/Library/Python/2.7/site-packages/pandas-0.17.1-py2.7-macosx-10.10-intel.egg/pandas/core/common.py", line 2548, in _concat_compat 
#  return _concat_compat(to_concat, axis=axis) 
# File "/Library/Python/2.7/site-packages/pandas-0.17.1-py2.7-macosx-10.10-intel.egg/pandas/tseries/common.py", line 256, in _concat_compat 
#  return DatetimeIndex(np.concatenate([ x.tz_localize(None).asi8 for x in to_concat ]), tz=list(tzs)[0]) 
# AttributeError: 'numpy.ndarray' object has no attribute 'tz_localize' 

Bất kỳ giúp đỡ về làm thế nào tôi có thể thêm hàng mới vào một dataframe có múi giờ cột timespamp biết sẽ được đánh giá rất nhiều.

+0

phiên bản gấu trúc của bạn là gì. Tôi có thể chạy ví dụ này tốt trong 0.16.1. Là một sang một bên, thay vì làm áp dụng (pd.to_datetime), chỉ cần làm pd.to_datetime (df). Dòng này: df [0] = df [0] .apply (pd.to_datetime) cũng có vẻ sai, có vẻ như bạn muốn df ['timestamp'] = df ['timestamp']. . – Chris

+0

@Chris này. Điều này có thể là niềm đam mê lớn nhất của tôi về mã hoang dã. Tôi đã nhìn thấy những thứ như: 'df.apply (lambda x: x.sum())' và tệ hơn. :/ –

+0

@Chris, cảm ơn vì đã chỉ ra sai lầm trong câu hỏi. Tôi đang sử dụng gấu trúc phiên bản 0.17.1. – yadu

Trả lời

1

Đó là lỗi trong phiên bản gấu trúc này (tín dụng cho this answer). Khi chúng ở trạng thái đó, giải pháp của bạn có thể là:

df = df.astype(str).append(df.loc[0].astype(str)) 
df['timestamp'] = pd.to_datetime(df['timestamp'], utc=True) 
Các vấn đề liên quan