【问题标题】:adding data pandas dataframe添加数据熊猫数据框
【发布时间】:2016-01-04 16:31:39
【问题描述】:

我需要一个 pandas 数据框来将值传递给散景。

df2 = DataFrame(data=mia_classe,columns=['classe','media','deviazione'])
for classe in Classe.objects.all():
    risposte = Risposta.objects.filter(prova__classe=classe).values_list('score', flat=True)
    df2.append({'classe': classe,'media':media(risposte)*10,'deviazione':sigma(risposte)*10}, ignore_index=True)
print df2

此代码不返回错误,但数据框为空。 看完this question这个方法我也试过了:

mia_classe = defaultdict(list)
df2 = DataFrame(data=mia_classe,columns=['classe','media','deviazione'])
for classe in Classe.objects.all():
    risposte = Risposta.objects.filter(prova__classe=classe).values_list('score', flat=True)
    mia_classe = {'classe': classe,'media':media(risposte)*10,'deviazione':deviazione_standard(risposte)*10}
    new_df = pandas.DataFrame.from_dict(mia_classe)
    df2.append(new_df, ignore_index=True)
print df2

这是错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/allora/testingresso/testingresso/estraicoras.py", line 30, in <module>
    new_df = pandas.DataFrame.from_dict(mia_classe)
  File "//anaconda/envs/test/lib/python2.7/site-packages/pandas/core/frame.py", line 804, in from_dict
    return cls(data, index=index, columns=columns, dtype=dtype)
  File "//anaconda/envs/test/lib/python2.7/site-packages/pandas/core/frame.py", line 226, in __init__
    mgr = self._init_dict(data, index, columns, dtype=dtype)
  File "//anaconda/envs/test/lib/python2.7/site-packages/pandas/core/frame.py", line 363, in _init_dict
dtype=dtype)
  File "//anaconda/envs/test/lib/python2.7/site-packages/pandas/core/frame.py", line 5158, in _arrays_to_mgr
index = extract_index(arrays)
  File "//anaconda/envs/test/lib/python2.7/site-packages/pandas/core/frame.py", line 5197, in extract_index
    raise ValueError('If using all scalar values, you must pass'
ValueError: If using all scalar values, you must pass an index

有什么建议吗?

【问题讨论】:

标签: python pandas


【解决方案1】:

尝试添加orient='index':

new_df = pandas.DataFrame.from_dict(mia_classe, orient='index')

使用一个即兴的例子:

mia_classe = {'classe': 'classe','media': 100,'deviazione': 150}
new_df = pd.DataFrame.from_dict(mia_classe, orient='index')

                 0
classe      classe
deviazione     150
media          100

【讨论】:

  • 谢谢!不幸的是,需要确切的列顺序。问题出在附加方法上。
  • 您发布的错误源于.from_dict() 部分,而不是.append() 方法。
【解决方案2】:

问题出在 append 方法上。我误解了熊猫参考。 这是我如何解决的(在我同事的帮助下):

mio_dict = {'nome': [],'media':[],'deviazione':[]}                                                    
for classe in Classe.objects.all():
    risposte = Risposta.objects.filter(prova__classe=classe).values_list('score', flat=True)
    mio_dict['nome'].append(u"%s - %s" % (classe.sezione, classe.scuola.nome))
    mio_dict['media'].append(media(risposte)*10)
    mio_dict['deviazione'].append(sigma(risposte)*10)

mio_df = pandas.DataFrame(mio_dict)
print mio_df

所以,基本上我可以解决改变观点的问题:而不是将每个类附加其名称、平均值和标准差,将每个名称附加到其他名称,将每个 avg 附加到其他 avg 等等。

结果听起来像这样:

    deviazione     media                             nome
0     3.841544  7.614035        1A - piazzi lena perpenti
1     4.457753  6.807576                  1A - otto marzo
2     4.001645  7.602469                 1F - g. ferraris
3     4.133874  7.241026                 1M - g. ferraris
4     4.494765  7.149123       1BS - piazzi lena perpenti

【讨论】:

    猜你喜欢
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    相关资源
    最近更新 更多