python进行excel数据提取问题

文件如下
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!")


最终效果图如下

img

是这个意思吗?

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数据提取的需求。下面是具体的解决方案:

  1. 首先,我们需要安装pandas库。可以使用以下命令安装: pip install pandas

  2. 导入pandas库和openpyxl库(用于处理Excel文件): python import pandas as pd from openpyxl import load_workbook

  3. 使用pandas的read_excel函数读取Excel文件,并获得其中的数据: python # 读取Excel文件 df = pd.read_excel('your_excel_file.xlsx')

  4. 保留"Unnamed: 0"至"Unnamed: 2"这三列的数据不变。可以使用pandas的iloc方法来切片: python df_sliced = df.iloc[:, :3]

  5. 提取包含关键字"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]

  6. 将提取的数据放到新的DataFrame中,并将其列名更改为"Unnamed: 3"和"Unnamed: 4": python new_df = pd.DataFrame({ 'Unnamed: 3': filtered_df['AutomationParam_n2'], 'Unnamed: 4': next_column })

  7. 将保留的三列数据和提取的数据合并为一个新的DataFrame: python final_df = pd.concat([df_sliced, new_df], axis=1)

  8. 最后,将结果保存到一个新的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)

给个源文件会好些

援引讯飞星火:
解析:

  1. 首先,我们需要使用pandas库来读取excel文件。
  2. 然后,我们需要找到包含关键字"AutomationParam_n2"的行。
  3. 对于每一行,我们需要提取关键字所在列的单元格,以及关键字右边一列的单元格。
  4. 最后,我们需要将这些数据放到Unnamed: 3,Unnamed: 4列。

代码如下:

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'替换为实际的列名。