2015-12-23 11 views
5

Zaman damgası sütununa ve sayısal bir sütuna sahip bir veri çerçevem ​​var. Zaman damgası sütunu saat dilimi naif ise yeni bir satır ekleyebilirim. Ben damgası sütun için saat dilimi ayarlayın ve ardından yeni satır eklenemez çalışırsanızZaman dilimi farkında zaman damgası sütunu ile bir veri çerçevesine nasıl eklenir?

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 

Ama hatası alıyorum.

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' 

Ben saat dilimi farkında timespamp sütunu olan bir dataframe için yeni satırlar ekleyebilirsiniz nasıl bir Yardım büyük takdir edilecektir.

+0

. Bu örneği 0.16.1'de iyi çalıştırabilirim. Bir kenara, uygulamak yerine (pd.to_datetime), sadece pd.to_datetime (df) yapın. Bu hat: [0] = df [0] .apply (pd.to_datetime) da yanlış gibi görünüyor df Eğer df [ 'damgası'] = df [ 'damgası'] istediğiniz gibi görünüyor. . – Chris

+0

@Chris Bu. Muhtemelen en büyük panda-vahşi kod ağrımdır. Ben gibi şeyler gördüm: df.apply (lambda x: x.sum()) 've daha kötüsü. :/ –

+0

@Chris, sorudaki hatayı işaret ettiğiniz için teşekkürler. Ben pandalar sürüm 0.17.1 kullanıyorum. – yadu

cevap

1

O (this answer kredi) Bu pandalar sürümünde bir mikroptur. Orada devlet gibi , senin çözüm olabilir: sizin pandalar versiyonu ne

df = df.astype(str).append(df.loc[0].astype(str)) 
df['timestamp'] = pd.to_datetime(df['timestamp'], utc=True)