Python 如何使用matplotlib.pyplot打印列表?

Python 如何使用matplotlib.pyplot打印列表?,python,Python,为什么我得到一个TypeError:unhabable type:numpy.ndarray错误?另外,我不记得将numpy导入到我的代码I中。numpy.ndarray在做什么?错误在代码的最后一行 import pandas as pd import matplotlib.pyplot as plt entries_csv = "C:\\Users\\Asus\\Desktop\\Entries.csv" listofaccounts_csv = "C:\\Users\\Asus\\Des

为什么我得到一个TypeError:unhabable type:numpy.ndarray错误?另外,我不记得将numpy导入到我的代码I中。numpy.ndarray在做什么?错误在代码的最后一行

import pandas as pd
import matplotlib.pyplot as plt

entries_csv = "C:\\Users\\Asus\\Desktop\\Entries.csv"
listofaccounts_csv = "C:\\Users\\Asus\\Desktop\\List of Accounts.csv"

data_entries = pd.read_csv(entries_csv)
data_listofaccounts = pd.read_csv(listofaccounts_csv)

i = 0
summary_name = [0]*len(data_listofaccounts)
summary =  [0]*1*len(data_listofaccounts)
for account_name in data_listofaccounts['Account Name']:
    summary_name[i] = account_name
    for debit_account in data_entries['DEBIT ACCOUNT']:
        if account_name == debit_account:
            summary[i] += data_entries['DEBIT AMOUNT']
    i += 1


plt.bar(list(summary_name), list(summary))
以下是数据:

一,。参赛作品:

二,。帐户清单:


基本上,对于账户列表中的每一项,我想做一个总结,其中每种类型的账户的所有借方金额都将合计

我认为在这种情况下,您确实需要在两个数据帧之间利用pd.merge功能。请参见此处:。加入两个表后,您需要根据帐户名分组并执行聚合。例如:

list_of_accounts_df = pd.DataFrame({
    'Account Name': ['ACCOUNT PAYABLE', 'OUTSIDE SERVICE'], 
    'Type': ['CURRENT LIABILITY', 'EXPENSE']
})

entries_df = pd.DataFrame({
    'DEBIT ACCOUNT':['OUTSIDE SERVICE', 'OUTSIDE SERVICE'], 
    'DEBIT AMOUNT': [46375.8, 42091.42] ,
    'CREDIT ACCOUNT':['CASH IN BANK', 'CASH ON HAND'],
    'CREDIT AMOUNT':[46375.8, 42091.42]
})


pd.merge(list_of_accounts_df, entries_df, left_on='Account Name', right_on='DEBIT ACCOUNT', how='left').fillna(0).groupby('Account Name')['DEBIT AMOUNT'].sum()
输出成为一个系列,其中每个索引是帐户名称,值是该系列所有借方金额的总和。因此,在这种情况下:

Account Name
ACCOUNT PAYABLE    0.00    
OUTSIDE SERVICE    88467.22
关于如何绘制的问题,对于条形图,不能直接提供x轴或y轴的字符串值

使用以下示例:,在本例中,您可以执行以下操作:

objects = x.index.values 
y_pos = range(len(objects)
vals = x.values

plt.bar(y_pos, vals, align='center')
plt.xticks(y_pos, objects)
plt.ylabel('Sum of Debits')
plt.title('Total Debits Per Account')

plt.show()
这在我们的简单示例中给出:

list_of_accounts_df = pd.DataFrame({
    'Account Name': ['ACCOUNT PAYABLE', 'OUTSIDE SERVICE'], 
    'Type': ['CURRENT LIABILITY', 'EXPENSE']
})

entries_df = pd.DataFrame({
    'DEBIT ACCOUNT':['OUTSIDE SERVICE', 'OUTSIDE SERVICE'], 
    'DEBIT AMOUNT': [46375.8, 42091.42] ,
    'CREDIT ACCOUNT':['CASH IN BANK', 'CASH ON HAND'],
    'CREDIT AMOUNT':[46375.8, 42091.42]
})


pd.merge(list_of_accounts_df, entries_df, left_on='Account Name', right_on='DEBIT ACCOUNT', how='left').fillna(0).groupby('Account Name')['DEBIT AMOUNT'].sum()

您是否有机会上传一个条目示例和帐户列表?这将有助于更好地了解你正在尝试做什么。与您的具体问题无关,我认为很多嵌套for循环都可以用pandas完成。@lhay86当然可以。我实际上是想写一份报告。我将上传数据集。我还怀疑您希望将summary_name[I]=data_listofaccounts['Account name']更改为summary_name[I]=Account_name,同样地,summary[I]+=data_entries['DEBIT AMOUNT']更改为summary[I]+=借记账户但如果没有你的代码示例,我无法确定。哦,等一下,我会解决的。以后不要复制/粘贴屏幕截图,而是复制/粘贴几行文本。我希望我不是学究,我最近才活跃在这个社区,并发现如果人们很容易在他们的计算机上复制错误,他们会乐于提供帮助