我需要用格式化的字符串替换日期列。我可以这样:
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/