【问题标题】:Return a value in a cell if the correspondent cell from another column is part of another specific value Python如果来自另一列的对应单元格是另一个特定值 Python 的一部分,则返回单元格中的值
【发布时间】:2021-09-08 13:11:01
【问题描述】:

我有一个 6 列的 Excel 表。 如果发现另一个特定文本作为另一列单元格的一部分,我想读取该文件并添加另一列以插入特定文本。

我试过了:

import csv
import openpyxl
import pandas as pd

#writer = pd.ExcelWriter('testx.xlsx', engine='xlsxwriter')
#writer.save()



#from openpyxl import load_workbook
file = 'testx.xlsx'
#book = load_workbook(file)
#writer = pd.ExcelWriter(file, engine = 'openpyxl')
#writer.book = book
df = pd.read_excel('testx.xlsx')
#writer = pd.ExcelWriter('testx.xlsx')
df['Brand'] = df['Keyword'].map({'o.p.1.':33, 'sebastian':'seb', 'd.p.i':34})
df.to_excel('testx.xlsx')
#writer.save()


workbook  = writer.book
workbook.filename = 'testx.xlsx'

writer.save()
#writer.close()
#delete_files()

但总是有问题..

需要的 Ex 输出: 我填充了 A-F 列,我需要自动填充 G 列

z image_count x 提取内容关键词 L_brand 品牌 Z1 2 x Po , Po , N
Z2 1 x D.P.I NAIL LACQUER VERNIS A ONGLES D.P.I NAIL LACQUER VERNIS A ONGLES d.p.i, p.i, d.p.i, p.i, , Y
Z3 1 x O.P.1 NAIL LACQUER VERNIS A ONGLES O.P.1 NAIL LACQUER VERNIS A ONGLES o.p.1, o.p, o.p.1, , Y

如果我使用 writer,我不会收到错误,但它会检索一张空白纸

import csv
import openpyxl
import pandas as pd


file = 'testx.xlsx'
df = pd.read_excel(file)
writer = pd.ExcelWriter('testx.xlsx', engine='xlsxwriter')
df['Keyword'] = df['Brand'].map({'o.p.1.':33, 'sebastian':'seb', 'd.p.i':34})
df.to_excel('testx.xlsx')
writer.save()

上面的编辑代码不再抛出错误,但加载后,当我想打开 excel 文件时,它说有一个错误,它必须尽可能多地恢复并检索一张空白表。

【问题讨论】:

  • 您能否在问题中包含 csv 输入文件的示例> 请以 SO 社区可以复制和粘贴的格式发布数据
  • 我已经从我的 xlsx 文件中发布了数据。现在你可以复制粘贴了。

标签: python-3.x pandas xlsxwriter openxlsx


【解决方案1】:

根据您给定的数据,它看起来像您的 Keyword 列包含多个字符串值,而您将其映射到单个值。

在这种情况下,我们可以将apply 函数与用户定义一起使用,而不是使用map 函数

所以这里

import csv
import openpyxl
import pandas as pd

df = pd.read_excel('testx.xlsx')

key_maps = {'o.p.1.':33, 'sebastian':'seb', 'd.p.i':34} # include all 600 combination here 
# I am assuming all keys are in string format 

def myFunc(x):
    key = False
    for word in str(x).split(','):
       if word in key_maps.keys():
           key = True
           break
    return key_maps[word] if key else ""


df['Brand'] = df['Keyword'].apply(myFunc)

df.to_excel('test_result.xlsx')

【讨论】:

  • 如果 x 中的“op1”,我在 myFunc 中收到此错误:TypeError:“float”类型的参数不可迭代但问题是我需要 600 种组合的解决方案,该示例仅包括3,但我需要更多
  • 您的关键字列是否包含浮点值?
  • import csv import openpyxl import pandas as pd file = 'testx.xlsx' df = pd.read_excel(file) writer = pd.ExcelWriter('testx.xlsx', engine='xlsxwriter') key_maps = {'op1.':33, 'sebastian':'seb', 'dpi':34} def myFunc(x): key = False for word in str(x).split(','): if key_maps.keys() 中的单词: key = True break return key_maps[word] if key else "" df['Brand'] = df['Keyword'].apply(myFunc) df.to_excel('testx.xlsx') writer.save()
  • 返回一个需要修复的xlsx,修复后为空
  • 你正在覆盖同一个文件,我导致你损坏了用空白纸恢复的文件..请参考更新的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多