Pandas一些小问题解决方法

Pandas一些小问题解决方法


  • 一个函数中需要调用两次同一个Dataframe,而再第一次调用时需要对行列进行操作,而第二次调用需要第一次调用时操作的列(以删除为例
1
2
3
4
5
6
7
8
9
10
11
12
13

# 假设有userid, username, password, login_date列
data = pd.Dataframe()

# 第一次调用
df = data
del df['username']
print(df)

# 第二次调用
df_1 = data
print(df['username'])
# 这样是无法输出的,因为df和data共用同一个内存地址,即同时使用一个Dataframe,只是调用名称不同.

解决办法如下:

1
2
3
4
5
6
7
8
9
10
11
12
# 和上面的例子为同一个
data = pd.Dataframe()

# 第一次调用
df = data.__deepcopy__()
del df['username']
print(df)

# 第二次调用
df_1 = data
print(df['username'])
# 这样子就能得到两个结果啦~

小结:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 参考链接: http://python.jobbole.com/82294/

# 核心就是 __deepcopy__()方法---深拷贝(pandas)

"""Pandas官方以及解释
Make a copy of this objects data.

Parameters
----------
deep : boolean or string, default True
Make a deep copy, including a copy of the data and the indices.
With ``deep=False`` neither the indices or the data are copied.

Note that when ``deep=True`` data is copied, actual python objects
will not be copied recursively, only the reference to the object.
This is in contrast to ``copy.deepcopy`` in the Standard Library,
which recursively copies object data.

Returns
-------
copy : type of caller
"""

__deepcopy__的实际调用是调用 Dataframe.copy的对象(参数deep=True)
当使用深拷贝时,不会递归复制,只有对对象的引用。
与此形成对比的是标准库中的``copy.deepcopy``(真正的深拷贝),递归地复制对象数据。

文章作者: sunhailin-Leo
文章链接: http://www.leoyuki.xyz/2017/12/29/PythonPandas_1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明来自 LeoBlog