【问题标题】:ValueError: Location based indexing can only have [integer, integer slice, listlike of integers, boolean array] typesValueError:基于位置的索引只能具有 [整数、整数切片、整数列表、布尔数组] 类型
【发布时间】:2021-09-11 17:44:07
【问题描述】:

我想从头开始计算协方差。 协方差升高

ValueError(ValueError: 基于位置的索引只能有 [integer, 整数切片(起始点为 INCLUDED,END 点为 EXCLUDED), listlike of integers, boolean array] 类型错误。

我应该改变什么才能使代码正常工作?

import pandas as pd
import math

df = pd.read_csv('C:/Users/User/Downloads/Admission_Predict.csv')
df = df.sample(frac=1)

# Create a list for each column of the dataframe
for col in df:
    col_list = df[col].tolist()

    # Mean
    sums = 0
    for a in range(len(col_list)):
        sums += df.iloc[a]
    mean = sums / len(col_list)
    mean = [m for m in pd.to_numeric(mean, errors='coerce')]

    # Standard deviation
    for mean in range(len(col_list)):
        sd = math.sqrt(mean)

    # Correlation matrix
    cov = []
    for j in range(mean):
        for k in range(mean):

            # Random variables
            var = ((df.iloc[i, j] - str(range(mean))) * (df.iloc[i, k] - str(range(mean))) for i in str(range(mean)))

            # Covariance
            covariance = sum(var) / (mean - 1)
            print(covariance)

追溯

> Traceback (most recent call last):   File
> "C:\Users\User\PycharmProjects\algorithms\Fibonacci recursive.py",
> line 31, in <module>
>     covariance = sum(var) / (mean - 1)   File "C:\Users\User\PycharmProjects\algorithms\Fibonacci recursive.py",
> line 28, in <genexpr>
>     var = ((df.iloc[i, j] - str(range(mean))) * (df.iloc[i, k] - str(range(mean))) for i in str(range(mean)))   File
> "C:\Users\User\PycharmProjects\algorithms\venv\lib\site-packages\pandas\core\indexing.py",
> line 889, in __getitem__
>     return self._getitem_tuple(key)   File "C:\Users\User\PycharmProjects\algorithms\venv\lib\site-packages\pandas\core\indexing.py",
> line 1450, in _getitem_tuple
>     self._has_valid_tuple(tup)   File "C:\Users\User\PycharmProjects\algorithms\venv\lib\site-packages\pandas\core\indexing.py",
> line 725, in _has_valid_tuple
>     raise ValueError( ValueError: Location based indexing can only have [integer, integer slice (START point is INCLUDED, END point is
> EXCLUDED), listlike of integers, boolean array] types
> 
> Process finished with exit code 1

【问题讨论】:

    标签: python pandas types statistics covariance


    【解决方案1】:

    似乎df.iloc[i, j](类似于[k,i])是问题所在。选项见iloc reference。

    根据您的DataFrame,我认为您想访问位置 [i,j] 和 [i,k] 的值,对吗? 所以你得到i 和.iloc[i] 的行,然后访问你需要的列。下面是一个简单的示例,用于检索一个用于执行计算的值。

    
    import pandas as pd
    
    df = pd.DataFrame({
        'a' : [0, 1, 2, 3, 4, 5],
        'b' : [6, 7, 8, 9, 10, 11]
    })
    
    
    i = 2
    j = 1
    
    value = int(df.iloc[i:i+1,j]) # output: 8
    

    【讨论】:

    • 这给了我TypeError: cannot do positional indexing on Int64Index with these indexers [r] of type str
    • var = ((df.iloc[i].j - str(range(mean))) * (df.iloc[i].k - str(range(mean))) for i in str(range(mean))) 给了我TypeError: Cannot index by location index with a non-integer key 错误
    • var = ((df.iloc[i:, j] - str(range(mean))) * (df.iloc[i:, k] - str(range(mean))) for i in str(range(mean))) 引发TypeError: cannot do positional indexing on Int64Index with these indexers [r] of type str。不知道nr_values 是什么意思。
    • nr_values 将是您要切片的索引。如果您只想有一个值,只需使用索引 i+1。很抱歉造成混乱。
    • 我试过var = ((df.iloc[i:i+1, j] - str(range(mean))) * (df.iloc[i:i+1, k] - str(range(mean))) for i in str(range(mean))) 和var = ((str(df.iloc[i:i+1, j]) - str(range(mean))) * (str(df.iloc[i:i+1, k]) - str(range(mean))) for i in str(range(mean)))。两者都给了我TypeError: can only concatenate str (not "int") to str 错误。
    猜你喜欢
    • 1970-01-01
    • 2019-05-11
    • 2016-04-29
    • 2017-12-08
    • 2019-03-13
    • 2017-11-24
    • 2019-12-15
    • 2021-08-29
    • 2019-12-12
    相关资源
    最近更新 更多