在熊猫中复制与观看的明确灵丹妙药?

时间:2017-01-03 06:11:38

标签: python pandas

好的伙计们!我遭受了很多苦难,因为Pandas对DataFrame的复制或视图是多么挑剔。我只想使用索引来确保我总是得到pandas DataFrame,就像我在Python中得到任何其他变量,没什么花哨,没有BS,只是直接的老式数据访问和分配。 e.g。

x = [0, 1, 2, 3, 4]
x[3] = 5
print(x)
[0, 1, 2, 5, 4]

这就是我想做的一切。什么是确保这种情况发生的可靠方法,我不太担心这里的效率。

非常感谢你。

1 个答案:

答案 0 :(得分:3)

import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.arange(25).reshape(5, 5),
    list('abcde'), list('ABCDE'))

# this is the problem assignment that is causing the warning
d1 = df[['A', 'B']]

d1.loc['a', 'A'] = 99

enter image description here

使用loc来创建副本

d2 = df.loc[:, ['A', 'B']]

d2.loc['a', 'A'] = 99

d2

    A   B
a  99   1
b   5   6
c  10  11
d  15  16
e  20  21

复制导致警告的数据框

的方法

定义一个函数,尝试在传递的数据帧的第一个元素上进行赋值。

def try_assignment(df):
    df.iloc[0, 0] = 1000

现在让我们测试一些案例

警告True

  • try_assignment(df[['A']])
  • try_assignment(df[:-1])
  • try_assignment(df.iloc[:, :-1])

警告False

  • try_assignment(df.loc[:, 'A'])
  • try_assignment(df[:])
  • try_assignment(df.loc[:, df.columns[:-1]])
  • try_assignment(df.loc[df.index[1:], df.columns[1:]])
  • try_assignment(df[['A']].copy())