Pandas 写入 excel:1) 来自索引的空行; 2)每天保持索引
Pandas writing to excel: 1) blank row from index; 2) keep index daily
我过去一直使用 Stata 进行数据分析,但我今天一直在探索 pandas。我成功地复制了我在 Stata 中所做的一些分析,但我很难将其导出到 excel。
我用 write_excel()
得到的例子
Column1 Column2
Date
2014-01-01 00:00:00 x a
2014-01-02 00:00:00 y b
2014-01-03 00:00:00 z c
我想对齐索引,使其与列 headers 对齐。本质上,我想将 headers 列保留在原处,但将所有内容向上移动一个单元格。
我希望我的索引只有日期 (YYYY-MM-DD) 而没有小时、分钟和秒(它总是 00:00:00)。如何将我的索引更改为只有日期?
非常感谢。
对我有用的是重置索引,使 'Date' 成为普通列,然后调用 dt
属性 date
仅分配回日期部分并在写入 excel 时传递参数 index=False
:
In [34]:
df = df.reset_index()
df['Date'] = df.Date.dt.date
df
Out[34]:
Date Column1 Column2
0 2014-01-01 x a
1 2014-01-02 y b
2 2014-01-03 z c
然后
df.to_excel(r'c:\data\t.xlsx',index=False)
这会在 excel 中产生以下结果:
(1) 模仿您的格式:
import pandas as pd
from pandas import *
df = pd.read_csv('input.txt',sep=',',header=None,names=['Date','Column A','Column B'])
df = df.set_index(['Date'])
(2) 重新索引:
df = df.reset_index()
(3) 至 excel
writer = ExcelWriter('output.xlsx')
df.to_excel(writer,'Sheet1',index=False)
writer.save()
注意:
对于 excel 作者,您需要有 openpyxl。使用 pip install openxl
安装轻而易举。此处的相关信息:https://openpyxl.readthedocs.org/en/latest/。
或者,写入 csv 会更简单。
上述 ipython 中步骤的实施示例:
In [1]: import pandas as pd
In [2]: from pandas import *
In [3]: # 1. Mimicking your format:
In [4]: df = pd.read_csv('input.txt',sep=',',header=None,names=['Date','Column A','Column B'])
In [5]: print ( df )
Date Column A Column B
0 2014-01-01 00:00:00 x a
1 2014-01-02 00:00:00 y b
2 2014-01-03 00:00:00 z c
In [6]: df = df.set_index(['Date'])
In [7]: print ( df )
Column A Column B
Date
2014-01-01 00:00:00 x a
2014-01-02 00:00:00 y b
2014-01-03 00:00:00 z c
In [8]: ## 2. Doing a reindexing:
In [9]: df = df.reset_index()
In [10]: print ( df )
Date Column A Column B
0 2014-01-01 00:00:00 x a
1 2014-01-02 00:00:00 y b
2 2014-01-03 00:00:00 z c
In [11]: ## 3. To excel
In [12]: writer = ExcelWriter('output.xlsx')
In [13]: df.to_excel(writer,'Sheet1',index=False)
In [14]: writer.save()
我认为处理 pandas DatetimeIndex 格式的最简单易行的方法是 pandas ExcelWriter 本身的 kwarg。
datetime_format='yyyy-mm-dd'
例如,
import pandas as pd
import xlsxwriter
'''
Suppose that there is 'df' the pandas dataframe which contains DatetimeIndex(ex. 2015-04-15 10:15:30) as index.
'''
writer = pd.ExcelWriter('result.xlsx', engine='xlsxwriter', datetime_format='yyyy-mm-dd')
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
对于任何其他单元格 (batch/individual) 格式,请使用 xlsxwriter add_format()、set_column() 等
我过去一直使用 Stata 进行数据分析,但我今天一直在探索 pandas。我成功地复制了我在 Stata 中所做的一些分析,但我很难将其导出到 excel。
我用 write_excel()
得到的例子 Column1 Column2
Date
2014-01-01 00:00:00 x a
2014-01-02 00:00:00 y b
2014-01-03 00:00:00 z c
我想对齐索引,使其与列 headers 对齐。本质上,我想将 headers 列保留在原处,但将所有内容向上移动一个单元格。
我希望我的索引只有日期 (YYYY-MM-DD) 而没有小时、分钟和秒(它总是 00:00:00)。如何将我的索引更改为只有日期?
非常感谢。
对我有用的是重置索引,使 'Date' 成为普通列,然后调用 dt
属性 date
仅分配回日期部分并在写入 excel 时传递参数 index=False
:
In [34]:
df = df.reset_index()
df['Date'] = df.Date.dt.date
df
Out[34]:
Date Column1 Column2
0 2014-01-01 x a
1 2014-01-02 y b
2 2014-01-03 z c
然后
df.to_excel(r'c:\data\t.xlsx',index=False)
这会在 excel 中产生以下结果:
(1) 模仿您的格式:
import pandas as pd
from pandas import *
df = pd.read_csv('input.txt',sep=',',header=None,names=['Date','Column A','Column B'])
df = df.set_index(['Date'])
(2) 重新索引:
df = df.reset_index()
(3) 至 excel
writer = ExcelWriter('output.xlsx')
df.to_excel(writer,'Sheet1',index=False)
writer.save()
注意:
对于 excel 作者,您需要有 openpyxl。使用 pip install openxl
安装轻而易举。此处的相关信息:https://openpyxl.readthedocs.org/en/latest/。
或者,写入 csv 会更简单。
上述 ipython 中步骤的实施示例:
In [1]: import pandas as pd
In [2]: from pandas import *
In [3]: # 1. Mimicking your format:
In [4]: df = pd.read_csv('input.txt',sep=',',header=None,names=['Date','Column A','Column B'])
In [5]: print ( df )
Date Column A Column B
0 2014-01-01 00:00:00 x a
1 2014-01-02 00:00:00 y b
2 2014-01-03 00:00:00 z c
In [6]: df = df.set_index(['Date'])
In [7]: print ( df )
Column A Column B
Date
2014-01-01 00:00:00 x a
2014-01-02 00:00:00 y b
2014-01-03 00:00:00 z c
In [8]: ## 2. Doing a reindexing:
In [9]: df = df.reset_index()
In [10]: print ( df )
Date Column A Column B
0 2014-01-01 00:00:00 x a
1 2014-01-02 00:00:00 y b
2 2014-01-03 00:00:00 z c
In [11]: ## 3. To excel
In [12]: writer = ExcelWriter('output.xlsx')
In [13]: df.to_excel(writer,'Sheet1',index=False)
In [14]: writer.save()
我认为处理 pandas DatetimeIndex 格式的最简单易行的方法是 pandas ExcelWriter 本身的 kwarg。
datetime_format='yyyy-mm-dd'
例如,
import pandas as pd
import xlsxwriter
'''
Suppose that there is 'df' the pandas dataframe which contains DatetimeIndex(ex. 2015-04-15 10:15:30) as index.
'''
writer = pd.ExcelWriter('result.xlsx', engine='xlsxwriter', datetime_format='yyyy-mm-dd')
df.to_excel(writer, sheet_name='Sheet1')
writer.save()
对于任何其他单元格 (batch/individual) 格式,请使用 xlsxwriter add_format()、set_column() 等