编辑:建议的可能重复项 ( this question ) 不是重复项。我问是否可以编辑数据帧的切片并使该切片影响原始数据帧。建议的“重复”问答只是寻找 .loc
的替代品。我最初的问题的简单答案似乎是“不”。
原始问题:
这个问题可能在某个地方有重复,但我找不到它。另外,我猜我要问的问题是不可能的,但值得一试。
我希望能够过滤或屏蔽大型数据帧,获取较小的数据帧以便于编码,编辑较小的数据帧,并使其影响较大的数据帧。
所以像这样:
df_full = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
df_part = df_full[df_full['a'] == 2]
df_part['b'] = 'Kentucky Fried Chicken'
print df_full
会导致:
a b
0 1 4
1 2 Kentucky Fried Chicken
2 3 6
我很清楚使用 .loc[row_indexer, col_indexer]
功能的能力,但即使使用 mask
变量作为 row_indexer
,对于更复杂的目的来说,它可能有点笨拙。
一些上下文 - 我正在将大型数据库表加载到数据框中,并希望对其一小部分进行许多编辑。所以 .loc[]
变得乏味。也许我可以过滤掉那个小片段,对其进行编辑,然后重新附加到原始片段?
有什么想法吗?
最佳答案
简短回答
没有。您不想玩必须不断检查/猜测是否使用数据帧的副本或 View 的游戏。
单一更新:正确的方式
.loc
访问器是正确的选择。虽然需要一些时间来适应,但没有什么不方便。
无论您的标准多么复杂,如果它归结为 bool 数组,.loc
访问器仍然通常是正确的选择。您需要展示一个确实难以实现的示例。
df_full = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6]})
df_full.loc[df_full['a'] == 2, 'b'] = 'Kentucky Fried Chicken'
# a b
# 0 1 4
# 1 2 Kentucky Fried Chicken
# 2 3 6
单一更新:另一种方式
如果您发现 .loc
访问器难以实现,一种替代方法是 numpy.where
:
df_full['b'] = np.where(df_full['a'] == 2, 'Kentucky Fried Chicken', df_full['b'])
多次更新:针对多种情况
pandas.cut
, numpy.select
或numpy.vectorize
可以有效地简化您的代码。这些的有用性取决于您尝试应用的特定逻辑。以下问题包含每个问题的示例:
关于python - Pandas:编辑数据框的一部分,使其影响主数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49591323/