我的数据组织在一个数据帧:
import pandas as pd
import numpy as np
data = {'Col1' : [4,5,6,7], 'Col2' : [10,20,30,40], 'Col3' : [100,50,-30,-50], 'Col4' : ['AAA', 'BBB', 'AAA', 'CCC']}
df = pd.DataFrame(data=data, index = ['R1','R2','R3','R4'])
它看起来像这样(只大得多):
Col1 Col2 Col3 Col4
R1 4 10 100 AAA
R2 5 20 50 BBB
R3 6 30 -30 AAA
R4 7 40 -50 CCC
我的算法遍历这个表中的行,并执行一组操作。
对于清洁度/ lazyness起见,我想在每次迭代的单排工作,而无需键入df.loc['row index', 'column name']
以获取每个单元格的值
我曾试图按照正确的样式使用,例如:
row_of_interest = df.loc['R2', :]
但是,我还是得到警告,当我做:
row_of_interest['Col2'] = row_of_interest['Col2'] + 1000
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
而且它不工作(如我意),它正在复制
print df
Col1 Col2 Col3 Col4
R1 4 10 100 AAA
R2 5 20 50 BBB
R3 6 30 -30 AAA
R4 7 40 -50 CCC
用正确的方法有什么建议做呢? 或者我应该只是坚持直接与数据帧的工作?
编辑1:
使用提供的警告从代码中删除,但原来的数据帧不被修改的答复:在“利益排” Series
是一个副本而不是原始数据帧的一部分。 例如:
import pandas as pd
import numpy as np
data = {'Col1' : [4,5,6,7], 'Col2' : [10,20,30,40], 'Col3' : [100,50,-30,-50], 'Col4' : ['AAA', 'BBB', 'AAA', 'CCC']}
df = pd.DataFrame(data=data, index = ['R1','R2','R3','R4'])
row_of_interest = df.loc['R2']
row_of_interest.is_copy = False
new_cell_value = row_of_interest['Col2'] + 1000
row_of_interest['Col2'] = new_cell_value
print row_of_interest
Col1 5
Col2 1020
Col3 50
Col4 BBB
Name: R2, dtype: object
print df
Col1 Col2 Col3 Col4
R1 4 10 100 AAA
R2 5 20 50 BBB
R3 6 30 -30 AAA
R4 7 40 -50 CCC
编辑2:
这是我想复制功能的示例。 在Python列表清单是这样的:
a = [[1,2,3],[4,5,6]]
现在,我可以创造一个“标签”
b = a[0]
如果我改变b条目:
b[0] = 7
A和B的变化。
print a, b
[[7,2,3],[4,5,6]], [7,2,3]
可这种行为是大熊猫据帧标记其行之一的熊猫系列之间复制吗?