我需要用格式化的字符串替换日期列。我可以这样:

df = pd.DataFrame(pd.date_range('2016-01-01', '2016-01-02'), columns=['date'])
df['date'] = df['date'].dt.strftime('%Y-%m-%d')


但是,我想使用列索引而不是列名(数据帧传递给我,并且我不能保证列名是唯一的)。我可以这样:

df.iloc[:, 0] = df.iloc[:, 0].dt.strftime('%Y-%m-%d')


这可以正常工作,但对于长度为1的数据帧将失败:

df = pd.DataFrame([pd.to_datetime('2016-01-01')], columns=['date'])
df.iloc[:, 0] = df.iloc[:, 0].dt.strftime('%Y-%m-%d')



  _try_coerce_args中的pandas / core / internals.py(自身,值和其他)
  
  -> 2265其他= other.astype('i8',copy = False).view('i8')
  
  ValueError:以10为基数的int()的无效文字:'2016-01-01'


请注意,按列名称进行的分配仍然有效:

df['date'] = df.iloc[:, 0].dt.strftime('%Y-%m-%d')


我想了解为什么对于长度为1的数据帧,按列索引分配失败,以及如何使它工作。我在python 3.5中使用pandas 0.19.1。

最佳答案

有点hack,但是可以用[]按位置选择列:

df = pd.DataFrame([pd.to_datetime('2016-01-01')], columns=['date'])

print (df.columns[0])
date

df[df.columns[0]] = df.iloc[:, 0].dt.strftime('%Y-%m-%d')
print (df)
         date
0  2016-01-01

关于python - 按列索引将新系列分配给现有列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42269935/

10-12 17:27