python - Pandas:编辑数据框的一部分,使其影响主数据框

标签 python python-2.7 pandas dataframe filter

编辑:建议的可能重复项 ( 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.selectnumpy.vectorize可以有效地简化您的代码。这些的有用性取决于您尝试应用的特定逻辑。以下问题包含每个问题的示例:

Numpy “where” with multiple conditions

关于python - Pandas:编辑数据框的一部分,使其影响主数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49591323/

相关文章:

python - 我可以在 Python 中的任何地方定义范围吗?

python - 如何使用 Sphinx 记录特定部分中的成员?

python - 恢复 Pandas 中的默认显示上下文

python - Pandas 映射到新列 SettingWithCopyWarning

python - 我试图在打印时向列表中添加新行,但无法使其工作

python - BlueZ 示例 GATT 服务器

Python (PyMySQL) SELECT 查询返回 bool 值,而不是所需的值

python - 如何克服python中的缩进错误?

python - 在 Django 1.11 和 django _rest 框架中的嵌套序列化器上实现更新方法

python - 在 pandas Series 数据中,如何根据函数返回的数据获取键?