I am trying to check whether the dictionary having multiple key:value pairs of dataframes contains any dataframe with empty rows or dataframe doesn't exist in dictionary which should be there while saving in dictionary earlier.
I have tried this but no luck
if __name__=="__main__":
# dict contains {a:df1, b:df2}
if [bool(v) for (k, v) in dict.items()] == False :
print('No data available')
sys.exit()
else:
# DO SOMETHING WITH DATA
CodePudding user response:
Use DataFrame.empty with any for test if at least one DataFrame is empty:
dict1 = {'a': pd.DataFrame(), 'b':pd.DataFrame([5])}
print ([v.empty for (k, v) in dict1.items()])
[True, False]
if any(v.empty for (k, v) in dict1.items()):
print('No data available')
No data available
dict1 = {'a': pd.DataFrame([2]), 'b':pd.DataFrame([1])}
print ([v.empty for (k, v) in dict1.items()])
[False, False]
if any(v.empty for (k, v) in dict1.items()):
print('No data available')
dict1 = {'a': pd.DataFrame(), 'b':pd.DataFrame()}
print ([v.empty for (k, v) in dict1.items()])
[True, True]
if any(v.empty for (k, v) in dict1.items()):
print('No data available')
No data available
EDIT: For test some keys is possible use set - order of values is not important:
dict1 = {'a': pd.DataFrame(), 'b':pd.DataFrame()}
L = ['c','a','b']
if (set(dict1.keys()) != set(L)):
print('missing some key!')
missing some key!
dict1 = {'a': pd.DataFrame(), 'b':pd.DataFrame(), 'c': pd.DataFrame()}
L = ['c','a','b']
if (set(dict1.keys()) != set(L)):
print('missing some key!')
EDIT1: For combine both conditions use or:
if (set(dict1.keys()) != set(L)) or any(v.empty for (k, v) in dict1.items()):
print('missing some key or some empty df!')
