文件如下
https://www.jianguoyun.com/p/Db5nqv8Qufy1ChjOxpkFIAA
需求如下
主要针对注释3和注释4部分进行优化
1.保留Unnamed: 0-Unnamed: 2三列数据不变
2.提取关键字AutomationParam_n2,关键字的单元格,关键字右边一列的单元格,放到Unnamed: 3,Unnamed: 4列
3.关键字AutomationParam_n2所在的列不固定
代码如下
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from datetime import date
import datetime
import re
file_name = 'B升A模板.xlsx' # insert file name in ''
sheet_name = 'Classification' # insert input sheet name in ''
df_data= pd.read_excel('C:\\Users\\2010000054\\Desktop\\HALM\\' + file_name,
sheet_name=[sheet_name])
df= df_data.get(sheet_name)
# 1. 保留含有关键字的行
keywords = ['AutomationParam_n2']
filtered_rows = []
for index, row in df.iterrows():
for keyword in keywords:
if any(isinstance(cell_value, str) and keyword in cell_value for cell_value in row):
filtered_rows.append(index)
break # 如果找到关键字,跳出内部循环
filtered_df = df.loc[filtered_rows].copy()
# 2. 对 'Unnamed: 2' 列进行从小到大排序,去除重复值
filtered_df = filtered_df.sort_values(by='Unnamed: 2').drop_duplicates(subset='Unnamed: 2')
df = filtered_df
# 3. 保留Unnamed: 0-Unnamed: 2三列数据不变
df_new = df.iloc[:, :3].copy()
# 查找关键字所在的列
keywords = ['AutomationParam_n2']
keyword_col = None
for col in df.columns:
for keyword in keywords:
if keyword in df[col].astype(str).values:
keyword_col = col
break
if keyword_col:
break
# 4提取关键字及其右边一列的数据,替换到Unnamed: 3 和 Unnamed: 4 列
if keyword_col:
df_new['Unnamed: 3'] = df[keyword_col].copy()
keyword_col_index = df.columns.get_loc(keyword_col)
if keyword_col_index + 1 < len(df.columns):
next_col = df.columns[keyword_col_index + 1]
df_new['Unnamed: 4'] = df[next_col].copy()
else:
df_new['Unnamed: 4'] = ''
# 输出结果
print(df_new)
with pd.ExcelWriter('C:\\Users\\2010000054\\Desktop\\HALM\\' + file_name,
mode='a') as writer:
df_new.to_excel(writer, sheet_name='output')
print("Done!")
最终效果图如下
是这个意思吗?
import pandas as pd
data = {'name0': ['0', '1', '2', '3', '4', '5'],
'name1': ['He1', 'He2', 'He3', 'He4', 'He5', 'He6'],
'name2': [1, 2, 3, 4, 5, 6],
'name3': ['CamResult1', 'CamResult1', 'CamResult1', 'CamResult1', 'CamResult1', 'CamResult1'],
'name4': [101, 101,101,101,101,101,],
'name5': ['Auto2', 's2', 's2', 'Auto2', 's2', 's8'],
'name6': [1, 1, 1, 1, 1, 1, ],
'name7': ['', 'Auto2', 's2', 'ss', 's2', 'Auto2'],
'name8': [11, 12, 13, 14, 15, 16, ],
}
df = pd.DataFrame(data=data)
print(df)
df1 = df.apply(lambda x:pd.Series([x[0], x[1], x[2],x[6] if x[5] == 'Auto2' else ' ',x[8] if x[7] == 'Auto2' else ' ', ]), axis = 1)
df1.columns = df.columns[:5]
print(df1)
结果【5列有关键字的就把6列值放在第3列,7列有关键字的就把8列放第4列】:
name0 name1 name2 name3 name4 name5 name6 name7 name8
0 0 He1 1 CamResult1 101 Auto2 1 11
1 1 He2 2 CamResult1 101 s2 1 Auto2 12
2 2 He3 3 CamResult1 101 s2 1 s2 13
3 3 He4 4 CamResult1 101 Auto2 1 ss 14
4 4 He5 5 CamResult1 101 s2 1 s2 15
5 5 He6 6 CamResult1 101 s8 1 Auto2 16
name0 name1 name2 name3 name4
0 0 He1 1 1 101
1 1 He2 2 CamResult1 12
2 2 He3 3 CamResult1 101
3 3 He4 4 1 101
4 4 He5 5 CamResult1 101
5 5 He6 6 CamResult1 16
引用 皆我百晓生 小程序回复内容作答:
你可以使用Python中的pandas库来处理Excel数据。下面是一个示例代码,可以实现你的需求:
import pandas as pd
# 读取Excel文件
df = pd.read_excel('your_file.xlsx')
# 保留Unnamed: 0-Unnamed: 2三列数据不变
df_new = df.iloc[:, :3]
# 查找关键字所在的列
keyword_col = None
for col in df.columns:
if 'AutomationParam_n2' in df[col].values:
keyword_col = col
break
# 提取关键字及其右边一列的数据
if keyword_col:
df_new['Unnamed: 3'] = df[keyword_col]
df_new['Unnamed: 4'] = df[df.columns[df.columns.get_loc(keyword_col) + 1]]
# 输出结果
print(df_new)
请将代码中的your_file.xlsx
替换为你的Excel文件路径。这段代码会读取Excel文件,并将保留原始的Unnamed: 0-Unnamed: 2三列数据,然后查找关键字AutomationParam_n2所在的列,并将关键字及其右边一列的数据放到Unnamed: 3和Unnamed: 4列中。最后,输出处理后的结果。
希望对你有帮助!如果有任何问题,请随时提问。
【以下回答由 GPT 生成】
我可以使用Python中的pandas库来实现Excel数据提取的需求。下面是具体的解决方案:
首先,我们需要安装pandas库。可以使用以下命令安装: pip install pandas
导入pandas库和openpyxl库(用于处理Excel文件): python import pandas as pd from openpyxl import load_workbook
使用pandas的read_excel函数读取Excel文件,并获得其中的数据: python # 读取Excel文件 df = pd.read_excel('your_excel_file.xlsx')
保留"Unnamed: 0"至"Unnamed: 2"这三列的数据不变。可以使用pandas的iloc方法来切片: python df_sliced = df.iloc[:, :3]
提取包含关键字"AutomationParam_n2"的单元格及其右边一列的单元格内容。可以使用pandas的filter方法来过滤包含特定关键字的行,并使用shift方法来获取右边一列的内容: python # 过滤包含关键字的行 filtered_df = df[df.filter(regex='AutomationParam_n2').notnull().any(axis=1)] # 获取右边一列的内容 next_column = filtered_df.iloc[:, filtered_df.columns.get_loc('AutomationParam_n2') + 1]
将提取的数据放到新的DataFrame中,并将其列名更改为"Unnamed: 3"和"Unnamed: 4": python new_df = pd.DataFrame({ 'Unnamed: 3': filtered_df['AutomationParam_n2'], 'Unnamed: 4': next_column })
将保留的三列数据和提取的数据合并为一个新的DataFrame: python final_df = pd.concat([df_sliced, new_df], axis=1)
最后,将结果保存到一个新的Excel文件中: python # 创建一个Excel Writer对象 writer = pd.ExcelWriter('output.xlsx', engine='openpyxl') # 将DataFrame写入Excel文件 final_df.to_excel(writer, index=False, sheet_name='Sheet1') # 保存Excel文件 writer.save()
这样,我们就可以通过Python实现Excel数据的提取需求。请确保替换代码中的'your_excel_file.xlsx'为你实际的Excel文件路径,并根据需要修改输出文件的名称。
import pandas as pd
# 读取Excel文件
df = pd.read_excel('your_file.xlsx')
# 保留Unnamed: 0-Unnamed: 2三列数据不变
df_new = df.iloc[:, :3]
# 查找关键字所在的列
keyword_col = None
for col in df.columns:
if 'AutomationParam_n2' in df[col].values:
keyword_col = col
break
# 提取关键字及其右边一列的数据
if keyword_col:
keyword_index = df.columns.get_loc(keyword_col)
next_col_index = keyword_index + 1
next_col = df.columns[next_col_index]
df_new['Unnamed: 3'] = df[keyword_col]
df_new['Unnamed: 4'] = df[next_col]
# 保存结果到新的Excel文件
df_new.to_excel('output_file.xlsx', index=False)
print("数据提取完成并保存到output_file.xlsx文件。")
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
import pandas as pd
# 读取Excel文件
df = pd.read_excel("input.xlsx")
# 保留Unnamed: 0-Unnamed: 2三列数据不变
df_filtered = df.iloc[:, :3]
# 查找关键字列索引
keyword_col_index = df.columns.get_loc(df.filter(like="AutomationParam_n2").columns[0])
# 提取关键字列及其右边一列的数据
keyword_data = df.iloc[:, [keyword_col_index, keyword_col_index+1]]
# 将关键字数据放到Unnamed: 3和Unnamed: 4列
df_filtered["Unnamed: 3"] = keyword_data.iloc[:, 0]
df_filtered["Unnamed: 4"] = keyword_data.iloc[:, 1]
# 输出结果
print(df_filtered)
给个源文件会好些
援引讯飞星火:
解析:
代码如下:
import pandas as pd
# 读取excel文件
df = pd.read_excel('file.xlsx')
# 找到包含关键字"AutomationParam_n2"的行
mask = df['your_column_name'].str.contains('AutomationParam_n2')
# 提取关键字所在列的单元格,以及关键字右边一列的单元格
df.loc[mask, ['Unnamed: 3', 'Unnamed: 4']] = df.loc[mask, 'your_column_name'].shift(-1)
# 保存到新的excel文件
df.to_excel('new_file.xlsx', index=False)
注意:在上述代码中,你需要将'your_column_name'替换为实际的列名。