如何创建现有 DataFrame(panda) 的副本?
How to create a copy of an existing DataFrame(panda)?
我刚刚开始探索 pandas。我尝试在不影响源 Dataframe 的情况下将对数缩放应用于 Dataframe 列。我将现有的 DataFrame(data_source) 传递给 DataFrame 构造函数,认为它会创建一个副本。
data_source = pd.read_csv("abc.csv")
log_data = pd.DataFrame(data = data_source).apply(lambda x: np.log(x + 1))
我认为它工作正常,但它是 recommended/correct 在复制的 DataFrame 上应用缩放的方法吗?它与 'DataFrame.copy' 函数有何不同?
DataFrame.apply
、.applymap
和np.log
不改变原来的数据,所以没必要copy()
另外,np.log
接受数组,所以在这种特殊情况下最好写成:
log_data = pd.DataFrame(np.log(data_source.values + 1),
columns=data_source.columns,
index=data_source.index)
pd.DataFrame(data = data_source)
不复制。这是构造函数 copy
参数的文档中的 documented:
copy : boolean, default False
Copy data from inputs. Only affects DataFrame / 2d ndarray input
这也很容易通过尝试改变结果来观察到:
>>> x = pandas.DataFrame({'x': [1, 2, 3], 'y': [1., 2., 3.]})
>>> y = pandas.DataFrame(x)
>>> x
x y
0 1 1.0
1 2 2.0
2 3 3.0
>>> y
x y
0 1 1.0
1 2 2.0
2 3 3.0
>>> y.iloc[0, 0] = 2
>>> x
x y
0 2 1.0
1 2 2.0
2 3 3.0
如果你想要一个副本,调用copy
方法。不过,您不需要副本。 apply
已经 returns 一个新的数据帧,更好的是,您可以直接在数据帧上调用 numpy.log
或 numpy.log1p
:
>>> x = pandas.DataFrame({'x': [1, 2, 3], 'y': [1., 2., 3.]})
>>> numpy.log1p(x)
x y
0 0.693147 0.693147
1 1.098612 1.098612
2 1.386294 1.386294
我刚刚开始探索 pandas。我尝试在不影响源 Dataframe 的情况下将对数缩放应用于 Dataframe 列。我将现有的 DataFrame(data_source) 传递给 DataFrame 构造函数,认为它会创建一个副本。
data_source = pd.read_csv("abc.csv")
log_data = pd.DataFrame(data = data_source).apply(lambda x: np.log(x + 1))
我认为它工作正常,但它是 recommended/correct 在复制的 DataFrame 上应用缩放的方法吗?它与 'DataFrame.copy' 函数有何不同?
DataFrame.apply
、.applymap
和np.log
不改变原来的数据,所以没必要copy()
另外,np.log
接受数组,所以在这种特殊情况下最好写成:
log_data = pd.DataFrame(np.log(data_source.values + 1),
columns=data_source.columns,
index=data_source.index)
pd.DataFrame(data = data_source)
不复制。这是构造函数 copy
参数的文档中的 documented:
copy : boolean, default False
Copy data from inputs. Only affects DataFrame / 2d ndarray input
这也很容易通过尝试改变结果来观察到:
>>> x = pandas.DataFrame({'x': [1, 2, 3], 'y': [1., 2., 3.]})
>>> y = pandas.DataFrame(x)
>>> x
x y
0 1 1.0
1 2 2.0
2 3 3.0
>>> y
x y
0 1 1.0
1 2 2.0
2 3 3.0
>>> y.iloc[0, 0] = 2
>>> x
x y
0 2 1.0
1 2 2.0
2 3 3.0
如果你想要一个副本,调用copy
方法。不过,您不需要副本。 apply
已经 returns 一个新的数据帧,更好的是,您可以直接在数据帧上调用 numpy.log
或 numpy.log1p
:
>>> x = pandas.DataFrame({'x': [1, 2, 3], 'y': [1., 2., 3.]})
>>> numpy.log1p(x)
x y
0 0.693147 0.693147
1 1.098612 1.098612
2 1.386294 1.386294