小编Spa*_*y55的帖子

loc/iloc 返回引用还是副本?

我在使用 .loc / .iloc 作为循环的一部分时遇到一些问题。这是我的代码的简化版本:


INDEX=['0', '1', '2', '3', '4']
COLUMNS=['A','B','C']
df=pd.DataFrame(index=INDEX, columns=COLUMNS)
i=0

while i<1000:

    for row in INDEX:
        df.loc[row] = function()
    #breakpoint

    i_max = df['A'].idxmax()
    row_MAX=df.loc[i_max]

    if i == 0:
        row_GLOBALMAX=row_MAX
    elif row_MAX > row_GLOBALMAX:
        row_GLOBALMAX=row_MAX

i+=1
Run Code Online (Sandbox Code Playgroud)

基本上:

  1. 我用索引和列初始化数据框

  2. 我用 for 循环填充数据框的每一行

  3. 我发现索引“i_max”在“A”列中找到最大值

  4. 我保存数据帧中值为最大值“row_MAX”的行

  5. while 循环迭代步骤 2 到 4,并使用新变量 row_GLOBALMAX 来保存行“A”中具有最高值的行

代码在第一次执行 while 循环 (i=0) 期间按预期工作,但是在第二次迭代 (i=1) 时,当我停在指示的断点处时,我观察到一个问题:“row_MAX”和“row_GLOBALMAX”都有相对于第一次迭代已经发生了变化,并且遵循了更新的“df”数据框中的值,即使我尚未在第二次迭代中分配它们。

基本上, .loc 函数似乎创建了一个指向“df”数据帧的特定行的指针,而不是在该特定时刻实际分配一个值。这是正常行为吗?我应该使用什么来代替 .loc?

python dataframe pandas

7
推荐指数
1
解决办法
1万
查看次数

非静态类中的专用静态字段

有一个这样的课:

class Application
{
    private Process _process; 

    private static string _applicationPath = string.Empty;

    public void Start(string arguments)
    {
        if (!File.Exists(_applicationPath))
            Deploy();
        _process = Process.Start(_applicationPath, arguments);
    }

    public void SomeMethod()
    {
        //method that manipulate _process
    }

    private void Deploy()
    {
        // copying, installation steps (takes some time) and assign _applicationPath
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 我使用静态字段是不是很糟糕?预计Application的其他实例将使用相同的_applicationPath.
  2. 这是违反SRP原则(SOLID)的一个例子吗?我应该向其他班级提取"部署责任"吗?

c# solid-principles

5
推荐指数
1
解决办法
1588
查看次数

标签 统计

c# ×1

dataframe ×1

pandas ×1

python ×1

solid-principles ×1