试图在DataFrame的切片副本上设置一个值。在初始化期间使用熊猫

时间:2020-03-11 15:32:33

标签: python pandas

我试图初始化实例并传递数据帧,但是由于某种原因,我得到了输出

class TestReg:
    def __init__(self, x, y, create_intercept=False):
        self.x = x
        self.y = y
        if create_intercept:
           self.x['intercept'] = 1

x = data[['class', 'year']]
y = data['performance']
reg = TestReg(x, y, create_intercept=True)

尝试改用.loc [row_indexer,col_indexer] =值

请参阅文档中的警告:http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy self.x ['intercept'] = 1

知道我在做什么错吗?

1 个答案:

答案 0 :(得分:3)

您正在尝试将值更改为数据框的摘要(熊猫文字中的一个切片)。

清洁后,您尝试做的是:

import requests
import lxml.html

.xpath('//a[@class="product photo product-item-photo"]/img[@class="product-image-photo"]/@src/text()')
for i in image:
        print(i)

使用切片(此处为DataFrame的两列)时,熊猫可以使用副本或视图。仅读取数据无关紧要,但是如果您尝试更改数据则无关紧要,因此发出警告。

您应该传递原始数据框,并仅对其进行更改:

x = data[['class', 'year']]    # x is a slice here
x['intercept'] = 1             # dangerous because behaviour is undefined => warning

或者,如果您不想更改原始数据框,则可以强制复制:

class TestReg:
    def __init__(self, data, cols, y, create_intercept=False):
        self.data = data
        self.y = y
        if create_intercept:
           self.data['intercept'] = 1
           cols.append['intercept']
        self.x = data[cols]
...
reg = TestReg(data, ['class', 'year'], y, create_intercept=True)