【问题标题】:In Python Pandas Can't add new column after datetime column在 Python Pandas 中,不能在日期时间列之后添加新列
【发布时间】:2018-11-21 08:46:57
【问题描述】:

如果现有 DataFrame 的最后一列是 datetime 类型,我无法将新列连接到现有 Pandas DataFrame。这是一个最小的例子:

import pandas as pd
import numpy as np

dates      = [pd.Timestamp('2012-05-01'), pd.Timestamp('2012-05-02'), 
             pd.Timestamp('2012-05-03')]
ed         = pd.DataFrame( dates, index = range(3), columns=['Time'])
ed['Time'] = ed['Time'].dt.tz_localize('UTC').dt.tz_convert('US/Central')

ed         = pd.concat([ed, pd.DataFrame(columns = [ 'Column1', 'Column2'] 
             )], sort = False)



Traceback (most recent call last):
File "C:\Anaconda2\lib\site-packages\IPython\core\interactiveshell.py", line 2878, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-2-c82182e48b5f>", line 8, in <module>
ed         = pd.concat([ed, pd.DataFrame(columns = [ 'Column1', 'Column2'] )], sort = False)
File "C:\Anaconda2\lib\site-packages\pandas\core\reshape\concat.py", line 226, in concat
return op.get_result()
File "C:\Anaconda2\lib\site-packages\pandas\core\reshape\concat.py", line 423, in get_result
copy=self.copy)
File "C:\Anaconda2\lib\site-packages\pandas\core\internals.py", line 5421, in concatenate_block_managers
concatenate_join_units(join_units, concat_axis, copy=copy),
File "C:\Anaconda2\lib\site-packages\pandas\core\internals.py", line 5565, in concatenate_join_units
for ju in join_units]
File "C:\Anaconda2\lib\site-packages\pandas\core\internals.py", line 5851, in get_reindexed_values
 if not self.block._can_consolidate:
AttributeError: 'NoneType' object has no attribute '_can_consolidate'

【问题讨论】:

  • 你能尽快包含你的回溯/异常
  • @sudonym 我刚刚包含了回溯信息。

标签: python pandas datetime dataframe concatenation


【解决方案1】:

如果在将ed 连接到新的df 之后更改ed['Time'] 列怎么办?

dates = [pd.Timestamp('2012-05-01'), pd.Timestamp('2012-05-02'), pd.Timestamp('2012-05-03')]
ed = pd.DataFrame( dates, index = range(3), columns=['Time'])
ed['Time'] = ed['Time'].dt.tz_localize('UTC').dt.tz_convert('US/Central')
ed = pd.concat([ed, pd.DataFrame(columns = [ 'Column1', 'Column2'])], sort = False, axis=1) 

【讨论】:

  • 我现在就是这样做以避免错误。我不明白为什么我不能以另一种方式做到这一点?
  • 看起来只需要传递 axis=1 来连接 df 的列。我更新了答案。
猜你喜欢
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
相关资源
最近更新 更多