只有当 运行 通过 Tkinter 时,数据帧的真值才是模糊的
The truth value of a dataframe is ambiguous only when running it through Tkinter
我有一个函数应该计算 pandas 数据框中某些值的均值和中值,然后通过 Tkinter Treeview 显示它们。我已经在没有 Tkinter 的情况下测试了该功能并且它工作得很好,但是如果我 运行 使用它,它会给出这个错误:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().
这是我的代码:
def zip_mean_median():
global clean_df
clean_df['ACTIVITY DATE'] = pd.to_datetime(clean_df['ACTIVITY DATE']).dt.normalize()
clean_df = clean_df.sort_values(by=['ACTIVITY DATE'])
clean_df = clean_df.groupby([clean_df['ACTIVITY DATE'].dt.year, 'FACILITY ZIP'])['SCORE'].agg(['mean', 'median'])
clean_df = ttk.Treeview(clean_df)
clean_df.pack()
您不能将数据框直接传递给ttk.Treeview
,您需要手动构建它。这可以通过以下函数完成
import tkinter as tk
from tkinter import ttk
def dataframe_to_treeview(root, dataframe):
tree = ttk.Treeview(root, show='headings')
columns = list(dataframe.columns)
tree["columns"] = columns
tree.pack(expand=tk.TRUE, fill=tk.BOTH)
for i in columns:
tree.column(i, anchor=tk.W)
tree.heading(i, text=i, anchor=tk.W)
for i, row in dataframe.iterrows():
tree.insert("", "end", values=list(row))
return tree
例如,您可以按如下方式使用此功能:
import pandas as pd
inp = [{'Currency': 'EUR', 'Volume': '100', 'Country': 'SE'},
{'Currency': 'GBP', 'Volume': '200', 'Country': 'SE'},
{'Currency': 'CAD', 'Volume': '300', 'Country': 'SE'},
{'Currency': 'EUR', 'Volume': '400', 'Country': 'SE'},
{'Currency': 'EUR', 'Volume': '100', 'Country': 'DK'},
{'Currency': 'GBP', 'Volume': '200', 'Country': 'DK'},
{'Currency': 'CAD', 'Volume': '300', 'Country': 'DK'},
{'Currency': 'EUR', 'Volume': '400', 'Country': 'DK'},
]
df = pd.DataFrame(inp)
root = tk.Tk()
tree = dataframe_to_treeview(root, df)
root.mainloop()
我有一个函数应该计算 pandas 数据框中某些值的均值和中值,然后通过 Tkinter Treeview 显示它们。我已经在没有 Tkinter 的情况下测试了该功能并且它工作得很好,但是如果我 运行 使用它,它会给出这个错误:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
这是我的代码:
def zip_mean_median():
global clean_df
clean_df['ACTIVITY DATE'] = pd.to_datetime(clean_df['ACTIVITY DATE']).dt.normalize()
clean_df = clean_df.sort_values(by=['ACTIVITY DATE'])
clean_df = clean_df.groupby([clean_df['ACTIVITY DATE'].dt.year, 'FACILITY ZIP'])['SCORE'].agg(['mean', 'median'])
clean_df = ttk.Treeview(clean_df)
clean_df.pack()
您不能将数据框直接传递给ttk.Treeview
,您需要手动构建它。这可以通过以下函数完成
import tkinter as tk
from tkinter import ttk
def dataframe_to_treeview(root, dataframe):
tree = ttk.Treeview(root, show='headings')
columns = list(dataframe.columns)
tree["columns"] = columns
tree.pack(expand=tk.TRUE, fill=tk.BOTH)
for i in columns:
tree.column(i, anchor=tk.W)
tree.heading(i, text=i, anchor=tk.W)
for i, row in dataframe.iterrows():
tree.insert("", "end", values=list(row))
return tree
例如,您可以按如下方式使用此功能:
import pandas as pd
inp = [{'Currency': 'EUR', 'Volume': '100', 'Country': 'SE'},
{'Currency': 'GBP', 'Volume': '200', 'Country': 'SE'},
{'Currency': 'CAD', 'Volume': '300', 'Country': 'SE'},
{'Currency': 'EUR', 'Volume': '400', 'Country': 'SE'},
{'Currency': 'EUR', 'Volume': '100', 'Country': 'DK'},
{'Currency': 'GBP', 'Volume': '200', 'Country': 'DK'},
{'Currency': 'CAD', 'Volume': '300', 'Country': 'DK'},
{'Currency': 'EUR', 'Volume': '400', 'Country': 'DK'},
]
df = pd.DataFrame(inp)
root = tk.Tk()
tree = dataframe_to_treeview(root, df)
root.mainloop()