我正在尝试根据用户输入显示不同的DataFrame。
我创建了一个脚本,要求用户输入:
myscript.py
import libs.mssql as mssql
db = mssql.Database()
table_name = input("Please key in A, B or C: ")
table = db.WAP(table_name)
print(table)
input("Press Enter to exit.")
脚本应基于以下类函数打印输出:
class Database():
def __init__(self):
self.cnxn = pyodbc.connect(cnxn details)
def WAP(self, table_name):
sql = "EXECUTE Contract_Balance"
df = pd.read_sql(sql, self.cnxn)
A_filter = (df.Table_Name == 'A')
B_filter = (df.Table_Name == 'B') & (df.Product != 'C')
C_filter = (df.Table_Name == 'C') & (df.Product == 'C')
# Copy from df based on filters
A = df[A_filter].copy()
B = df[B_filter].copy()
C = df[C_filter].copy()
myDict = {"A": A, "B": B, "C": C}
if table_name in ('A', 'C'):
table = myDict[table_name]
group = ['Delivery', 'Product']
elif table_name == 'B':
table = myDict[table_name]
group = ['Delivery', 'Region']
return np.round(
table.groupby(group).\
apply(lambda x: pd.Series([np.average(x.Product_Price, weights=x.Balance),x.Balance.sum()],index=['Product_Price', 'Balance'])).\
unstack().\
swaplevel(1,0,axis=1).\
sort_index(axis=1).\
replace(np.nan, 0)
, 2).replace(0, '')
变量为table
和group
。
根据用户对table
(A,B或C)的输入,变量group
也将发生变化并影响最终输出。
myscript.py
失败,并显示以下错误:
AttributeError: 'str' object has no attribute 'groupby'
,由于Python将用户输入解析为字符串,因此不会返回变量A,B和C(已在类函数WAP
中定义)。
预期结果是myscript.py
根据用户输入的A
,B
或C
来打印出正确的表和组
编辑:添加字典并通过函数调用查找字典即可解决此问题
答案 0 :(得分:1)
您需要添加if语句,例如
if table == 'A':
table = A