python中DataFrame的切片:用.copy获取DF数据的某一列数据副本

我们可以使用类似列表的索引方式,将某一列的column参数作为索引值来获得一列数据,但是注意这是切片,我们需要在这个操作后面加上.copy()来避免后续可能带来的修改原来数据帧中数据的问题。

import pandas as pd
dict_data = {
	'student':["Li Lei","Han Meimei","Tom"],
	'score'	:[95,98,92],
	'gender':['M','F','M']
}
DF_data = pd.DataFrame(dict_data,columns=['gender','student','score'],index=['a','b','c'])
print(DF_data)
slice_data = DF_data['score'].copy()
print(slice_data)
slice_data[1] = 99
print(slice_data)
print(DF_data)

运行结果如下:

  gender     student  score
a      M      Li Lei     95
b      F  Han Meimei     98
c      M         Tom     92
a    95
b    98
c    92
Name: score, dtype: int64
a    95
b    99
c    92
Name: score, dtype: int64
  gender     student  score
a      M      Li Lei     95
b      F  Han Meimei     98
c      M         Tom     92
[Finished in 3.9s]

注意!切片得到的数据对应的还是原始数据任何修改都会 反映到原始数据上,想要一份副本不影响原始数据,必须使用.copy(),如上面的代码,如果我们去掉.copy()这个方法,得到的结果如下所示:

  gender     student  score
a      M      Li Lei     95
b      F  Han Meimei     98
c      M         Tom     92
a    95
b    98
c    92
Name: score, dtype: int64
E:\Programming\python_project\makebean\Dataframe\slice.py:11: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  slice_data[1] = 99
a    95
b    99
c    92
Name: score, dtype: int64
  gender     student  score
a      M      Li Lei     95
b      F  Han Meimei     99
c      M         Tom     92
[Finished in 3.9s]

我们看到python对此操作做了warning,并且给出了文档的参考地址,说明这样的操作是不被鼓励的。

你可能感兴趣的:(python高级数据处理方法)