【问题标题】:Adding a new column to a df each cycle of a for loop在 for 循环的每个循环中向 df 添加一个新列
【发布时间】:2019-08-13 16:44:45
【问题描述】:

我正在使用 for 循环对数据框进行一些修改。我在 for 循环的每个循环中添加一个新列,但是,我也在循环结束时删除了此列。我想知道是否可以在每个周期存储此列的值,并创建一个由每个周期生成的每个列组成的新数据框。我正在使用以下代码:

import numpy as np
import pandas as pd

newdf = np.zeros([1000,5])
df = pd.DataFrame(np.random.choice([0.0, 0.05], size=(1000,1000)))

for i in range(0, 10):
    df['sum']= df.iloc[:, -1000:].sum(axis=1)
    newdf[:,i] = df['sum']
    df = df.drop('sum', 1)

但是,我收到以下错误:

索引 5 超出了轴 1 大小为 5 的范围

谢谢

【问题讨论】:

  • 什么是newdf?它是什么形状?它与df 上的索引是什么?
  • Nathan,我修改了问题以澄清它,我对 df 执行了其他操作,但是,出于问题的目的,我认为没有必要提供这些细节。上面解释了主要目标。
  • 如果您进行我刚才建议的编辑,我的代码不会出错(将df 设为pd.DataFrame 并将d.drop 更改为df.drop)。
  • 您还有问题/疑问还是现在可以使用?
  • @Nathan 我已经编辑了这个问题,由于两个数据框的尺寸,错误上升。但是,问题上newdf的维度需要1000行5列,这就是我得到这个错误的原因,但我一直没能解决。

标签: python pandas dataframe


【解决方案1】:

问题的出现不是因为与df 有任何关系,而是因为当i = 5newdf[:, i] 指的是仅包含五列的 NumPy 数组的第六列。相反,如果您初始化 newdfnewdf = np.zeros([1000, 10]),或者仅循环遍历 range(5),那么您的代码运行不会出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2021-08-27
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多