如何使用Python添加缺少值的行
我必须添加缺少面积值的新行 下面是输入excel如何使用Python添加缺少值的行,python,pandas,xlrd,Python,Pandas,Xlrd,我必须添加缺少面积值的新行 下面是输入excel Name Depth Module Total Area Category Sub category 0 Module0 50 Category_1 Category_2 1 Module11 1 Category_1 Category_2 1 Module12 9 Category_1
Name Depth Module Total Area Category Sub category
0 Module0 50 Category_1 Category_2
1 Module11 1 Category_1 Category_2
1 Module12 9 Category_1 Category_2
2 Module21 3 Category_1 Category_2
2 Module22 5 Category_1 Category_2
1 Module13 5 Category_1 Category_2
2 Module21 2 Category_1 Category_2
2 Module22 1 Category_1 Category_2
2 Module23 1 Category_1 Category_2
1 Module14 2 Category_1 Category_2
1 Module15 3 Category_1 Category_2
1 Module16 4 Category_1 Category_2
1 Module17 7 Category_1 Category_2
1 Module18 6 Category_1 Category_2
1 Module19 2 Category_1 Category_2
1 Module120 5 Category_1 Category_2
1 Module121 3 Category_1 Category_2
输入excel的说明:
在上面的Excel表格中,深度只是图层。
输入包含,深度0分为深度1的个数意味着深度1的和应等于深度0。深度1(1+9+5+2+3+4+7+6+2+5+3=47),但深度0为50,因此,遗漏的总面积为3(50-47)。
我必须添加3个值作为类别的深度1
类似地,深度1被划分为深度2,所以深度2之和等于深度1。我们坐第三排。模块12(9)分为深度2的数量(3+5=8),此处缺失的总面积为1(9-8)
所以,我添加了一个名为MISC的额外行,它缺少了总面积。
我需要使用python添加MISC行。最好是熊猫
我试过下面的脚本。但它只支持一行,我需要添加整个excel工作表,其中包含missed Total_Area列
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
ip = "test.xlsx"
op = "test1.xlsx"
df = pd.read_excel(ip, 'Sheet1')
def Insert_row(row_number, df, row_value):
start_upper = 0
end_upper = row_number
start_lower = row_number
end_lower = df.shape[0]
upper_half = [*range(start_upper, end_upper, 1)]
lower_half = [*range(start_lower, end_lower, 1)]
lower_half = [x.__add__(1) for x in lower_half]
index_ = upper_half + lower_half
df.index = index_
df.loc[row_number] = row_value
df = df.sort_index()
return df
row_number = 7
row_value = ['MISC',2 , 'MISC',1 ,'Category_1' ,'Category_2']
if row_number > df.index.max()+1:
print("Invalid row_number")
else:
df = Insert_row(row_number, df, row_value)
df.to_excel(op, index=False)
预期产出:
Name Depth Module Total Area Category Sub category
0 Module0 50 Category_1 Category_2
1 Module11 1 Category_1 Category_2
1 Module12 9 Category_1 Category_2
2 Module21 3 Category_1 Category_2
2 Module22 5 Category_1 Category_2
**MISC 2 MISC 1 Category_1 Category_2**
1 Module13 5 Category_1 Category_2
2 Module21 2 Category_1 Category_2
2 Module22 1 Category_1 Category_2
2 Module23 1 Category_1 Category_2
**MISC 2 MISC 1 Category_1 Category_2**
1 Module14 2 Category_1 Category_2
1 Module15 3 Category_1 Category_2
1 Module16 4 Category_1 Category_2
1 Module17 7 Category_1 Category_2
1 Module18 6 Category_1 Category_2
1 Module19 2 Category_1 Category_2
1 Module120 5 Category_1 Category_2
1 Module121 3 Category_1 Category_2
**MISC 1 MISC 3 Category_1 Category_2**
我认为将
df.loc[row\u number]=row\u value
更改为df.iloc[…]=代码>将解决问题。As、.loc[]基于标签,而.iloc[]基于索引或整数。谢谢@Subrata,但我的excel文件有5000多行。所以,我在想,行数也应该取自脚本。我的脚本应该是插入行,填充所需的深度和总面积值。如果您有任何逻辑,请告诉我。您是否可以共享原始数据?我不太确定如何自动填充数据,因为我看到第4行和第8行具有相同的深度、模块、类别和子类别。我只能想到用空行分割文件。@CedricZoppolo,我只关注总面积和深度值。第4行(总深度拆分为9,但在9中我仅将3分类)是第3行的拆分。其中,as线号8(总深度拆分为5。此处共5个,分类为2)是线号7的拆分。我已将深度0拆分为深度1,将深度1拆分为深度2。所有深度1的总和应等于深度0。我将一些深度1分类为深度2。所以,深度2之和应该是深度1(前一行)的值。你有多少深度?是否只到2点?我认为将df.loc[row_number]=row_value
更改为df.iloc[…]=代码>将解决问题。As、.loc[]基于标签,而.iloc[]基于索引或整数。谢谢@Subrata,但我的excel文件有5000多行。所以,我在想,行数也应该取自脚本。我的脚本应该是插入行,填充所需的深度和总面积值。如果您有任何逻辑,请告诉我。您是否可以共享原始数据?我不太确定如何自动填充数据,因为我看到第4行和第8行具有相同的深度、模块、类别和子类别。我只能想到用空行分割文件。@CedricZoppolo,我只关注总面积和深度值。第4行(总深度拆分为9,但在9中我仅将3分类)是第3行的拆分。其中,as线号8(总深度拆分为5。此处共5个,分类为2)是线号7的拆分。我已将深度0拆分为深度1,将深度1拆分为深度2。所有深度1的总和应等于深度0。我将一些深度1分类为深度2。所以,深度2之和应该是深度1(前一行)的值。你有多少深度?只到2点吗?