问题描述
目标: 从一个 excel 文件中,我想获取所有日期在一个范围内的记录并将它们写入一个新的 excel 文件。我正在使用的 infile 有 500K+ 行和 21 列。
我的尝试:
我已将 infile 读入 Pandas 数据帧,然后返回 [('A',0),('B',[('C',1),[('D',2),('E',2)],('F',1)],('G',0)]
。如果我打印 DatetimeIndex
变量,我会得到所需的记录。
range
我遇到问题的地方是将上述 import pandas as pd
in_excel_file = r'path\to\infile.xlsx'
out_excel_file = r'path\to\outfile.xlsx'
df = pd.read_excel(in_excel_file)
range = (pd.date_range(start='1910-1-1',end='2021-1-1'))
print(range)
##prints
DatetimeIndex(['1990-01-01','1990-01-02','1990-01-03','1990-01-04','1990-01-05','1990-01-06','1990-01-07','1990-01-08','1990-01-09','1990-01-10',...
'2020-12-23','2020-12-24','2020-12-25','2020-12-26','2020-12-27','2020-12-28','2020-12-29','2020-12-30','2020-12-31','2021-01-01'],dtype='datetime64[ns]',length=11324,freq='D')
放到输出文件中。以下给了我一个错误:
DatetimeIndex
range.to_excel(out_excel_file,index=False)
我很确定,当写到 excel 时,它必须是 dataframe。所以,我的问题是如何将 AttributeError: 'DatetimeIndex' object has no attribute 'to_excel'
变量获取到数据帧对象?
解决方法
目标:从一个 excel 文件中,我想获取日期在一个范围内的所有记录,并将它们写入一个新的 excel 文件。我正在使用的 infile 有 500K+ 行和 21 列。
您可以使用索引操作从原始 DataFrame 中仅选择您需要的数据并将结果保存在 Excel 文件中。
为了首先执行此操作,您需要检查原始 DataFrame 中的日期列是否已转换为日期时间/日期对象:
import numpy as np
date_column = "date" # Suppose this is your date column name
if not np.issubdtype(df[date_column].dtype,np.datetime64):
df.loc[:,date_column] = pd.to_datetime(df[date_column],format="%Y-%m-%d")
现在您可以使用常规索引操作来获取您需要的所有值:
mask = (df[date_column] >= '1910-01-01') & (df[date_column] <= '2021-01-01') # Creates mask for date range
out_dataframe = df.loc[mask] # Here we select the indices using our mask
out_dataframe.to_excel(out_excel_file)
,
在写入 Excel 之前,您可以尝试从 DatetimeIndex 创建一个数据框,如下所示:
range_df = pd.DataFrame(index=range).rename_axis(index='range').reset_index()
或者按照@guimorg 的建议,我们也可以这样做:
range_df = range.to_frame(index=False,name='range')
然后,继续使用您的代码将其写入 Excel:
range_df.to_excel(out_file,index=False)