簡體   English   中英

Python統計信息包mean()從pandas數據框給出了錯誤答案

[英]Python statistics package mean() gives wrong answer from pandas dataframe

我正在使用Python 3.6,試圖獲取pandas數據框(pandas版本0.23.4)行的子集中的某些值的平均值。 我正在使用.loc []獲取值,然后嘗試通過python statistics包中的mean()獲取它們的平均值,如下所示:

import statistics as st
rows = ['row1','row2','row3']
somelist = []
for i in rows:
    a = df.loc[i,"Q1":"Q7"]
    somelist.append(st.mean(a))

我最終得到的答案沒有任何小數位。 如果我將項目Q1:Q7的答案手動寫入列表中,則結果如下:

a = st.mean([2,3,4,4,2,6,5])
print(a)
Out: 3.7142857142857144

但是,如果該序列是我從數據幀中提取的序列,那么我將得到一個無小數位的均值,如下所示:

a = st.mean(df.loc[i,"Q1":"Q7"])
Out: 3

顯然是因為它認為它是numpy.int64而不是float。 即使將切片從數據幀轉換為列表,也會發生這種情況,如下所示:

a = st.mean(list(df.loc[i,"Q1":"Q7"]))
Out: 3

奇怪的是,如果我使用.mean(),它不會發生:

a = df.loc[i,"Q1":"Q7"].mean()
Out: 3.7142857142857144

我仔細檢查了st.stdev()方法,它似乎可以正常工作。 這是怎么回事? 為什么要自動打印出均值的整數? 謝謝!

statistics.mean將輸出轉換為與輸入相同的類型。 如果所有輸入值都是numpy.int64 ,則結果將轉換為numpy.int64 這是Python 3.6.7中statistics.mean的來源:

def mean(data):
    """Return the sample arithmetic mean of data.

    >>> mean([1, 2, 3, 4, 4])
    2.8

    >>> from fractions import Fraction as F
    >>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])
    Fraction(13, 21)

    >>> from decimal import Decimal as D
    >>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])
    Decimal('0.5625')

    If ``data`` is empty, StatisticsError will be raised.
    """
    if iter(data) is data:
        data = list(data)
    n = len(data)
    if n < 1:
        raise StatisticsError('mean requires at least one data point')
    T, total, count = _sum(data)
    assert count == n
    return _convert(total/n, T)

請注意, total/n在返回之前會轉換為輸入類型。

為了避免這種情況,您可以在將輸入傳遞給statistics.mean之前將其轉換為浮點。

我認為您所做的事情部分是錯誤的。 嘗試為要打印的每一行打印a,並在列表中附加均值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM