Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 如何在excel中插入行_Python_Python 3.x_Pandas - Fatal编程技术网

Python 如何在excel中插入行

Python 如何在excel中插入行,python,python-3.x,pandas,Python,Python 3.x,Pandas,我需要在excel中插入行并进行分类 下面是我输入的excel Level Module STD AREA MEM_AREA CM AREA HM AREA TOTAL_AREA Category 3 Module3 60 10 20 80 总面积是标准面积、最小面积、最小面积和最小面积之和。 我必须把上面这一行分成两行。如果有任何一行存在,我需要跳过它并添加剩余的行 我必须添加新行, 第

我需要在excel中插入行并进行分类

下面是我输入的excel

Level   Module  STD AREA    MEM_AREA    CM AREA HM AREA TOTAL_AREA  Category
3       Module3     60        10            20             80   
总面积是标准面积、最小面积、最小面积和最小面积之和。 我必须把上面这一行分成两行。如果有任何一行存在,我需要跳过它并添加剩余的行

我必须添加新行, 第一行将CM_区域值转换为HM_区域新列,其余为空, 第二行,STD_区域和MEM_区域位于同一列

原始输入:

要添加行的条件:

接下来的两个深度值应大于当前深度。如果下一个深度值大于或等于当前深度值,我们可以跳过它

深度2的总面积分为深度3、深度4等。。。但这里遗漏了一些地方。我需要补充一点。如果条件满足,我需要将STD_区域和MEM_区域移到新行。总面积是标准面积和最小面积之和

我试过下面的脚本

import pandas as pd
from pandas import ExcelWriter

ip = "test.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  

depths = df['Depth'].values.tolist()
for index, value in enumerate(depths):
     if depths[index] < depths[index+1]:
         print (index, value)
         # ADD new row here with STD_AREA and MEM_AREA.

#row_value = [4,Module4, , , , 10, 10, 'category']
#Insert_row(1, df, row_value)

#row_value = [4,Module5,60, 10, 10,  , 'category']
#Insert_row(1, df, row_value)
预期产出:
非常感谢您的帮助。

如果您只需要添加两行,最好创建一个DICIARY,其中键作为列名,列表作为值,并将此新数据框附加到已读数据框

其代码如下:

将熊猫作为pd导入
ip=“test.xlsx”
read_df=pd.read_excel(ip,'Sheet1')
添加到\u追加\u df=pd.Dataframe(
{
“级别”:[4,4],
“模块”:[“模块4”、“模块5”],
“标准区域”:[float('NaN'),60.0],
“内存区域”:[float('NaN'),10.0],
“HM区域”:[20,浮动('NaN')],
“总面积”:[20,70],
“类别”:[“类别1”、“类别2”],
}
)
new_df=pd.concat([read_dataframe,to_append_df])
这张照片是:

   CM AREA   Category  HM AREA  Level  MEM AREA   Module  STD AREA  TOTAL AREA
0     20.0        NaN      NaN      3      10.0  Module3      60.0          80
1      NaN  Category1     20.0      4       NaN  Module4       NaN          20
2      NaN  Category2      NaN      4      10.0  Module5      60.0          70

我使用
float('NaN')
以使单元格具有未定义的值。

我的数据超过5000行,我需要找到特定条件以自动添加行和所需列。因此,与其传递值,不如使用列名传递单元格值。阅读所有内容,然后删除多余的行和列。条件是什么?
   CM AREA   Category  HM AREA  Level  MEM AREA   Module  STD AREA  TOTAL AREA
0     20.0        NaN      NaN      3      10.0  Module3      60.0          80
1      NaN  Category1     20.0      4       NaN  Module4       NaN          20
2      NaN  Category2      NaN      4      10.0  Module5      60.0          70