【问题标题】:For a specific cell in a pandas dataframe, remove an element of a list对于 pandas 数据框中的特定单元格,删除列表中的一个元素
【发布时间】:2017-01-07 15:33:13
【问题描述】:

所以我使用 python 3 并将 pandas 导入为 pd,并且我有一个数据框 df,其中的元素是一个整数列表。我正在尝试编写一个函数,该函数将从数据框特定单元格的列表中删除一个元素。

我拥有的是:

def eliminate(r,c,v):
    '''for row r and column c eliminate value v'''
    df[c][r].remove(v)

但是,当我运行该函数时,它会从每个单元格的列表中删除 v。我不确定这里出了什么问题。

【问题讨论】:

  • FWIW,通常最好不要将列表存储在 pandas 数据帧中。例如。一列整数列表更好地组织成额外的行和/或整数列。您的代码几乎总是会更快更简单。

标签: python list python-3.x pandas


【解决方案1】:

您可以使用loc 选择和交换cr

def eliminate(r,c,v):
    '''for row r and column c eliminate value v'''
    df.loc[r, c].remove(v)
    return df

示例:

df = pd.DataFrame({'A':[[1,2,3],[3,4]],
                   'B':[[4,5],[6, 3]]})

print (df)
           A       B
0  [1, 2, 3]  [4, 5]
1     [3, 4]  [6, 3]

def eliminate(r,c,v):
    '''for row r and column c eliminate value v'''
    #another solution
    #df.loc[r, c] = [x for x in df.loc[r, c] if x != v]
    df.loc[r, c].remove(v)
    return df

print (eliminate(0,'A',2))
        A       B
0  [1, 3]  [4, 5]
1  [3, 4]  [6, 3]

print (eliminate(1,'B',3))
        A       B
0  [1, 3]  [4, 5]
1  [3, 4]     [6]

【讨论】:

  • 我不明白。如果 OP 没有,为什么这段代码会起作用? OP 是否更有可能在框架中对同一个列表进行了多次引用?
  • @DSM - 哎呀,我测试了它,你是对的。也许类型问题?我还没有收到来自 OP 的反馈。
  • @DSM - 也许 OP 忘记了return df
  • @DSM 在我这边确认。 df = pd.DataFrame([[[1, 2]]]); df[0][0] is df.iloc[0, 0]True
猜你喜欢
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
相关资源
最近更新 更多