【问题标题】:how to replace the header row when reading from Excel- Python从 Excel-Python 读取时如何替换标题行
【发布时间】:2015-11-10 17:11:06
【问题描述】:

我正在读取一个 Excel 文件,我想从中提取一些表格,并为每个表格放置相同的标题。

现在将第一行作为表头,而实际表头是第三行。

这是我所做的:

new_header = df.iloc[1]
df = df[3:] #choose the data
df.rename(columns = new_header)

但它不会更改标题行。任何帮助表示赞赏。

更新: @EdChum 的回答解决了标题问题。但是我对标题的格式有疑问。标题是Month-Year 格式的日期,我想保持这种状态。但是当它读取它时,它会将格式更改为"2014-01-01 00:00:00"。我写了以下 peice 来修复它,但它只更改了第一个单元格格式,因此不能将其用作新标题。

new_header = datetime.datetime.strptime("2014-01-01 00:00:00", '%Y-%m-%d %H:%M:%S').strftime('%b-%y')

【问题讨论】:

  • 这可能只是字符串显示问题,能否确认一下header dtype是str还是datetime,谢谢
  • @EdChum,在我更改格式之前,它将 dtype 显示为对象,之后它只打印“Jan-14”,这是我作为第一个参数给出的字符串,而不是整行。
  • 看起来您的值是字符串,您应该可以使用pd.to_datetime 转换它们,试试df.columns = pd.todatetime(df.columns)
  • @EdChum,它没有改变。
  • 你必须发布你的完整数据和代码,因为我无法继续猜测可能发生的事情

标签: python numpy pandas dataframe


【解决方案1】:

直接赋值

df.columns = new_header

您还需要将结果分配回去:

df = df.rename(columns = new_header)

由于inplace=False 是默认值,大多数pandas ops 返回一个副本并且不是就地的。

如果你这样做了

df.rename(columns = new_header, inplace=True)

会有用的

【讨论】:

  • 谢谢。它有效,但它改变了值的格式。这些值是Jan-14 形式的日期,但它会将其打印为2014-01-01 00:00:00。我该如何解决?
  • 能不能发数据和代码,不然很难评论
猜你喜欢
  • 2016-02-12
  • 2017-01-27
  • 1970-01-01
  • 2013-07-07
  • 2015-09-28
  • 2020-07-07
  • 1970-01-01
相关资源
最近更新 更多