gpt4 book ai didi

Python 过滤错误。 boolean 系列键将被重新索引以匹配 DataFrame 索引。

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:30 24 4
gpt4 key购买 nike

我正在努力让我编写的代码正常工作。我知道这可能是一个简单的修复,但我似乎无法让它正常工作。本质上,我想要的是在 pandas 数据帧上创建一个 boolean 掩码,该掩码仅返回“PqaQuestion”中存在“实际制造商”或“实际集合”中的值的行。它适用于一组标准,但添加多个标准会使事情变得有点困惑。我似乎无法在不触发用户警告的情况下获得“或”运算符: boolean 系列键将被重新索引以匹配数据帧索引,这确实会弄乱输出。如果有人可以帮助解决这个问题,同时也可以帮助我理解为什么会发生这种情况,我将不胜感激。我看过有关该主题的其他帖子,但没有一个对其进行解释,而且我似乎无法根据自己的情况定制其他帖子。

names= ['PqaPrSKU', 'PrName', 'White Label Manufacturer', 'White Label Collection', 'Actual Manufacturer', 'Actual MaID', 'Actual Collection', 'PqaID', 'PqaQuestion', 'UpdatedQuestion', 'PanID', 'PanAnswer', 'UpdatedAnswer', 'DateAdded', 'PrBclgID']


def match_function(column1_value, column2_value, column3_value):
return (column2_value is not None) and (column1_value is not None) and (column3_value is not None) and (str(column2_value).lower() in str(column1_value).lower()) or (str(column3_value).lower() in str(column1_value).lower())


import pandas as pd
df = pd.read_csv('Bucket61(8.22).csv', names= names, skipinitialspace=True, skiprows=1)
#print(df.from_records(data))

indexer = df.apply(lambda row: match_function(row["PqaQuestion"], row["Actual Collection"], row["Actual Manufacturer"]), axis=1)


filtered_df = df[indexer]

print(filtered_df[indexer])
#print(df[indexer])
from pandas import ExcelWriter

writer = ExcelWriter('ScrubbedQATemplate.xlsx')
filtered_df.to_excel(writer, 'Sheet1')
writer.save()

最佳答案

您还没有准确解释 match_function 想要实现的目标,但是 pd.DataFrame.apply应尽可能避免。它只不过是一个薄薄的循环。

让我们尝试将 match_function 中的条件转换为 boolean 系列掩码:

def match_function(column1_value, column2_value, column3_value):
return (column2_value is not None) and (column1_value is not None) and \
(column3_value is not None) and \
(str(column2_value).lower() in str(column1_value).lower()) or \
(str(column3_value).lower() in str(column1_value).lower())

# match_function(row["PqaQuestion"], row["Actual Collection"], row["Actual Manufacturer"])

这是一次尝试:

cols = ['PqaQuestion', 'Actual Collection', 'Actual Manufacturer']

A = df[cols].astype(str).values

m1 = df[cols].notnull().all(1)
m2 = np.array([j.lower() in i.lower() for i, j, k in A])
m3 = np.array([k.lower() in i.lower() for i, j, k in A])

filtered_df = df[m1 & (m2 | m3)]

需要注意的几点:

  1. 我们通过 &/| 使用矢量化运算,而不是应用标量运算 and/or进行逐行运算。
  2. m1 通过 pd.DataFrame.all 将您的前 3 个条件合并为一个。 .
  3. Pandas 系列和 NumPy 数组中的 boolean 条件可以通过 &/| 运算符组合。

关于Python 过滤错误。 boolean 系列键将被重新索引以匹配 DataFrame 索引。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52596340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com