【问题标题】:Pandas - add value at specific iloc into new dataframe columnPandas - 将特定 iloc 的值添加到新的数据框列中
【发布时间】:2018-02-17 04:18:26
【问题描述】:

我有一个包含很多列的大型数据框。

对于数据帧中的每一行/索引,我会执行一些操作,读取一些辅助数据等并获得一个新值。有没有办法将该新值添加到正确行/索引处的新列中?

我可以使用 .assign 添加一个新列,但是因为我正在遍历行并且一次只生成要添加一个值的数据(生成它非常复杂)。生成后,我想立即将其添加到数据框中,而不是等到生成整个系列。

这不起作用并给出一个关键错误:

df['new_column_name'].iloc[this_row]=value

我需要先初始化列吗?

【问题讨论】:

  • 如果您提供您尝试执行的操作、数据帧的 sn-p 和预期输出,那么回答会容易得多。
  • 操作相当复杂,涉及读取和操作各种数据集,最终生成一个数字。我想将该数字添加到现有数据框中的正确行中。

标签: python pandas numpy


【解决方案1】:

如果你有像

这样的数据框
import pandas as pd
df = pd.DataFrame(data={'X': [1.5, 6.777, 2.444, pd.np.NaN], 'Y': [1.111, pd.np.NaN, 8.77, pd.np.NaN], 'Z': [5.0, 2.333, 10, 6.6666]})

您可以使用 .loc 来代替 iloc,使用行索引和列名,例如 df.loc[row_indexer,column_indexer]=value

df.loc[[0,3],'Z'] = 3

输出:

X Y Z 0 1.500 1.111 3.000 1 6.777 南 2.333 2 2.444 8.770 10.000 3 南南 3.000

【讨论】:

  • 这很好地解决了我遇到的问题。很好的解决方案
  • 这只是因为数据框的索引是行号的通用“计数器”。如果您已命名行,它将不起作用,例如使用时间戳或简单字符串。 other solution from RumbleFish 更长,但涵盖了这种情况。
【解决方案2】:

仅使用行号创建和填充新列有两个步骤... (在这种方法中,不使用 iloc

首先,使用行号

获取行索引
rowIndex = df.index[someRowNumber]

然后,使用 行索引loc 函数来引用特定行并添加新列/值

df.loc[rowIndex, 'New Column Title'] = "some value"

这两个步骤可以合并成一行,如下所示

df.loc[df.index[someRowNumber], 'New Column Title'] = "some value"

【讨论】:

  • 嘿。我正在使用您提到的步骤在 csv 中的特定行和列中添加值,但它不会写入 csv。只写入最后一行。你能修改一下这个答案吗?
  • @sheharbano 这个问题与熊猫数据框有关,而不是 csv 文件。您可以将 csv 导入 pandas 数据帧,使用上述说明进行更改,然后写回 csv
【解决方案3】:

您可以只使用函数 DataFrame.at 中内置的 pandas

您可以选择多个索引或单个索引和列的列表

df.at[4, 'B'] = 10

【讨论】:

  • 当 index 是一个 datetime 对象时,这个答案也很完美,该对象在 DataFrame 中尚不存在。谢谢!
【解决方案4】:

如果您想为新列中的某些行添加值,具体取决于数据框其他单元格中的值,您可以这样做:

import pandas as pd
df = pd.DataFrame(data={"A":[1,1,2,2], "B":[1,2,3,4]})

根据列“A”中的值在新列中添加值:

df.loc[df.A == 2, "C"] = 100

如果“A”列是 2,这将创建“C”列并向其添加值 100。

输出:

   A  B  C
0  1  1  NaN
1  1  2  NaN
2  2  3  100
3  2  4  100

不必先初始化列。

【讨论】:

  • 效果很好!谢谢
猜你喜欢
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
相关资源
最近更新 更多