场景:
选择 DataFrame 的子集时,很常见遇到使用 .copy() 方法显式复制父 DataFrame 的代码。问题出现了:为什么这是必要的?
推理:
Pandas 数据帧的行为与传统编程语言数组不同。当索引 pandas DataFrame(例如 my_dataframe[features_list])时,返回的值不会创建新副本,而是返回对原始 DataFrame 的视图或引用。对此视图所做的任何修改都会直接影响原始 DataFrame。
示例:
考虑以下代码:
df = pd.DataFrame({'x': [1, 2]}) df_view = df[0:1] # Returns a view of the first row df_view['x'] = -1 # Check the original DataFrame print(df)
输出:
x 0 -1 1 2
可以看到,修改df_view也修改了原来的df DataFrame。
解决方案:
为了防止出现此类意外后果,建议在修改 DataFrame 之前使用 .copy() 方法对其进行复制。这可确保对副本所做的任何更改都不会影响原始 DataFrame。
修订后的代码:
df = pd.DataFrame({'x': [1, 2]}) df_copy = df[0:1].copy() # Makes a copy of the first row df_copy['x'] = -1 # Check the original DataFrame print(df)
输出:
x 0 1 1 2
这种情况下,df保持不变。
好处数据框复制的功能:
以上是为什么在选择 Pandas DataFrame 的子集时应该使用 .copy()?的详细内容。更多信息请关注PHP中文网其他相关文章!