熊猫插入还是更新?

时间:2016-12-08 14:47:14

标签: python pandas

如果我在一个不存在该键的帧上执行df.update(),那么我可以添加它的最简洁方法是什么?

类似的东西:

try:
  df.update(new_data)
except:
  df.insert(new_data)

2 个答案:

答案 0 :(得分:1)

您可以使用:

df['new_column_name'] = new data

它将更新您的列,如果没有此类列,则创建新列。

如果仍然要处理没有列的情况,则尝试更新-您可以使用:

if new_column_name in df.columns:
    do_something()
else:
    do_something_else()

最后-如果您需要在DataFrame中的某个特定位置插入新列,则可以使用以下内容:

if new_column_name in df.columns:
     df['new_column_name'] = new data
else:
     df.insert(place_you_need_column_in, 'new_column_name', new data)

如果要遵循EAFP编码风格,则可以使用一些技巧-尝试首先插入(如果列已存在,则会返回错误):

try:  # It'll be executed only if you don't already have a column with 'new_column_name' in your df
    df.insert(place_you_need_column_in, 'new_column_name', new data)
else:
    df['new_column_name'] = new data

答案 1 :(得分:0)

目前还不清楚这里的实际用例是什么,但首先您可以通过在列上调用in来测试密钥是否已经存在:

In [61]:
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc'))
df

Out[61]:
          a         b         c
0 -0.968358  0.666118  0.758028
1 -0.805671 -0.994780  0.624423
2  0.449329  0.768457 -0.311637
3 -0.793448  1.258319 -0.924384
4  1.698867 -0.624939 -0.167027

In [62]:
'd' in df.columns

Out[62]:
False

此外,如果列不存在,那么您可以添加它,无论它是标量值还是数组长度相同:

In [63]:
df['d'] = 10
df

Out[63]:
          a         b         c   d
0 -0.968358  0.666118  0.758028  10
1 -0.805671 -0.994780  0.624423  10
2  0.449329  0.768457 -0.311637  10
3 -0.793448  1.258319 -0.924384  10
4  1.698867 -0.624939 -0.167027  10