Python 如何在excel中插入行
我需要在excel中插入行并进行分类 下面是我输入的excelPython 如何在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 总面积是标准面积、最小面积、最小面积和最小面积之和。 我必须把上面这一行分成两行。如果有任何一行存在,我需要跳过它并添加剩余的行 我必须添加新行, 第
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