Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pandas从excel中的给定日期列计算月和周,并附加到同一工作表中的另一列_Python_Excel_Pandas - Fatal编程技术网

Python 使用pandas从excel中的给定日期列计算月和周,并附加到同一工作表中的另一列

Python 使用pandas从excel中的给定日期列计算月和周,并附加到同一工作表中的另一列,python,excel,pandas,Python,Excel,Pandas,我正在使用pandas程序,在该程序中,我从其他excel工作表中获取行,并将它们附加到主文件中: import pandas as pd from openpyxl import load_workbook #reading all three ticket excel sheets df1 = pd.read_excel("sheet a.xlsx") df2 = pd.read_excel("sheet b.xlsx") df3 = pd.read

我正在使用pandas程序,在该程序中,我从其他excel工作表中获取行,并将它们附加到主文件中:

import pandas as pd
from openpyxl import load_workbook

#reading all three ticket excel sheets
df1 = pd.read_excel("sheet a.xlsx")
df2 = pd.read_excel("sheet b.xlsx")
df3 = pd.read_excel("sheet c.xlsx")

#Creating Panadas Excel writer using xlsxwriter as engine
writer = pd.ExcelWriter(r"main_excel.xlsx", engine = "openpyxl")

writer.book = load_workbook(r"main_excel.xlsx")
sheets = writer.book.sheetnames 
reader1 = pd.read_excel(r"main_excel.xlsx", "sheet a") 
reader2 = pd.read_excel(r"main_excel.xlsx", "sheet b") 
reader3 = pd.read_excel(r"main_excel.xlsx", "sheet c")  

df1.to_excel(writer, sheet_name =sheets[0], index = False, header = False,startrow=len(reader1)+1) 
df2.to_excel(writer, sheet_name =sheets[2], index = False, header = False,startrow=len(reader2)+1) 
df3.to_excel(writer, sheet_name =sheets[4], index = False, header = False,startrow=len(reader3)+1)  

writer.save() 
writer.close()
将数据写入excel文件后,我必须根据数据中的日期计算月份和周数,并填写缺失的列

每周都会追加数据,因此我希望将数据追加到预先存在的列中


有没有办法不用在excel表格中写公式就可以做到这一点?通过在程序中对其进行编码?

您可以使用以下代码转换日期列:

df['Opened'] = pd.to_datetime(df['Opened'])
然后,您可以使用以下命令获取其他列:

df['Month'] = df['Opened'].dt.month_name()
df['Week'] = df['Opened'].dt.week

这是可行的,但是我如何在不覆盖的情况下将其附加到列中?如果您不想覆盖月份和年份列中已经存在的内容,请使用筛选器将其删除。您可以执行
df2=df.loc[df['Month'].isna()]
df=df.loc[~df['Month'].isna()]
将它们分开,然后
df=pd.concat([df,df2])
。您可以在concat之前将答案中的代码应用于df2。