簡體   English   中英

DataFrame的真值不明確

[英]The truth value of a DataFrame is ambiguous

我正在嘗試在最后一個elif塊中獲得與品牌和制造商相關的相同值(例如brand == JR Watkins和Manufacturer == JRWatkins)。但是它給出了以下錯誤:

ValueError:DataFrame的真值不明確。 使用a.empty,a.bool(),a.item(),a.any()或a.all()。 我的代碼是:

import csv
import pandas as pd
import sys
class sample:
        def create_df(self, f):
                self.z=pd.read_csv(f)

        def get_resultant_df(self, list_cols):
                self.data_frame = self.z[list_cols[:]]

        def process_df(self, df, conditions):
                resultant_df = self.data_frame

                if conditions[2] == 'equals':
                        new_df=resultant_df[resultant_df[conditions[1]] == conditions[3]]
                        return new_df
                elif conditions[2] == 'contains':
                        new_df = resultant_df[resultant_df[conditions[1]].str.contains(conditions[3])]
                        return new_df
                elif conditions[2] == 'not equals':
                        new_df = resultant_df[resultant_df[conditions[1]] != conditions[3]]
                        return new_df
                elif conditions[2] == 'startswith':
                        new_df = resultant_df[resultant_df[conditions[1]].str.startswith(conditions[3])]
                        return new_df
                elif conditions[2] == 'in':
                        new_df = resultant_df[resultant_df[conditions[1]].isin(resultant_df[conditions[3]])]
                        return new_df
                elif conditions[2] == 'not in':
                        new_df = resultant_df[~resultant_df[conditions[1]].isin(resultant_df[conditions[3]])]
                        return new_df
                elif conditions[2]=='group':
                        new_df=list(resultant_df.groupby(conditions[0])[conditions[1]])
                        return new_df
                elif conditions[2]=='specific':
                        new_df=resultant_df.loc[resultant_df[conditions[0]]==conditions[8]]
                        return new_df
                elif conditions[2]=='same':
                        if(resultant_df.loc[(resultant_df[conditions[0]]==conditions[8]) & (resultant_df[conditions[1]]==conditions[8])]).all():
                                new_df=resultant_df
                                return new_df
if __name__ == '__main__':
        sample = sample()
        sample.create_df("/home/purpletalk/GrammarandProductReviews.csv")
        df = sample.get_resultant_df(['brand', 'reviews.id','manufacturer','reviews.title','reviews.username'])
        new_df = sample.process_df(df, ['brand','manufacturer','same','manufacturer', 'size', 'equal',8,700,'J.R. Watkins'])
        print new_df['brand']

我正在嘗試獲得與品牌和制造商相關的相同值(例如,品牌== JR沃特金斯和制造商== JRWatkins)

您的邏輯過於復雜。 只需應用一個過濾器:

df = df[(df['brand'] == 'J.R. Watkins') & (df['manufacturer'] == 'J.R.Watkins')]

您不需要pd.DataFrame.all() ,這似乎就是您要嘗試的。 您也不需要內部的if語句:如果不匹配,則將有一個空的數據框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM