pandas的引用与复制
来源:互联网 发布:d3.js 思维导图 demo 编辑:程序博客网 时间:2024/06/11 12:40
之前一直以为pandas任何的切片和筛选都是引用,也就是说,会改变最原始的数据。但是前几天发现并不是这样的。
下面对最常见的几种pandas 数据截取的方式做一个整理。
import pandas as pddef df_gen(): l1 = [1,2,3] l2 = [4,5,6] l3 = [7,6,5] df_t = pd.DataFrame() df_t['a'] = l1 df_t['b'] = l2 df_t['c'] = l3 return df_tprint 'df:', df_gen()print 'refernece:'df = df_gen()d1 = df.ad1[0] = 999print '1', dfdf = df_gen()d1 = df.ix[0]d1[0] = 999print '2', dfdf = df_gen()d1 = df.loc[1,:]d1[0] = 999print '3', dfdf = df_gen()d1 = df['a']d1[0] = 999print '4', dfprint 'copy:'df = df_gen()d1 = df.iloc[1]d1[0] = 999print '1', dfdf = df_gen()d1 = df[df.a > 1]d1[0] = 999print '2', dfdf = df_gen()d1 = df.loc[df.a > 1, 'b']d1[0] = 999print '3', df上面总共7种方式,前面四种是引用的方式,后面的三种是复制。
输出是这样一串:
df: a b c
0 1 4 7
1 2 5 6
2 3 6 5
refernece:
1 a b c
0 999 4 7
1 2 5 6
2 3 6 5
1 a b c
0 999 4 7
1 2 5 6
2 3 6 5
1 a b c
0 1 4 7
1 999 5 6
2 3 6 5
1 a b c
0 999 4 7
1 2 5 6
2 3 6 5
copy:
F:/int/ProjectIntern/DatabaseTransfer/dd.py:37: 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/indexing.html#indexing-view-versus-copy
d1[0] = 999
1 a b c
0 1 4 7
1 2 5 6
2 3 6 5
1 F:/int/ProjectIntern/DatabaseTransfer/dd.py:41: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
d1[0] = 999
a b c
0 1 4 7
1 2 5 6
2 3 6 5
1 a b c
0 1 4 7
1 2 5 6
2 3 6 5
我们发现pandas不是refernce的时候会有警告。refernce的时候,df原始的值被改变了,说明d1只是一个引用,而后面的copy则不然。
在使用pandas的时候要注意这一特性。
- pandas的引用与复制
- python 引用与复制
- Python 中的引用与复制
- c++的引用计数与写时复制
- 理解php内核的 引用计数器与写时复制
- js中复制基本类型与复制引用类型值的区别
- list的复制以及引用
- 类的引用和复制
- 引用类型的深浅复制
- Java 中对象引用与复制
- 47-引用计数与写时复制
- 4.5 引用与复制构造函数
- C++引用与复制构造函数
- C++引用与复制构造函数
- 引用 JAVA中浅复制与深复制
- Pandas DataFrame 日常的操作与发现
- Spark与Pandas中DataFrame的对比
- pandas中read_excel 与to_excel 的学习
- fl2440——RTC(实时时钟)的学习、内核添加RTC支持
- 202. Happy Number
- 调整路由DHCP静态分配IP,便于接口开发
- 懒虫小鑫
- 同步yum源
- pandas的引用与复制
- MyEclipse6.5的内存管理(ini文件中的参数设置)
- C# 农历日期帮助类
- leetcode 78-Subsets
- 图书管理系统——用例图、类图、时序图
- WordPress常用代码片段
- rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
- test
- 记忆化搜索