我们可以使用类似列表的索引方式,将某一列的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,并且给出了文档的参考地址,说明这样的操作是不被鼓励的。