Geo*_*ins 3 dataframe python-3.x pandas
我有一个包含几列的数据框。后来,添加了标题为“活动”的列。如果“Volume”列包含大于 0 的任何值,我需要将“Active”设置为 1。
这是我如何尝试的一个简单示例:
import pandas as pd
active_df = pd.DataFrame(columns=['Volume'])
active_df['Volume'] = 0, 0, 22, 22, 0, 22, 0, 22, 0, 22
active_df['Active'] = 0
active_df['Active'].loc[active_df['Volume'] > 0] = 1
print(active_df)
Run Code Online (Sandbox Code Playgroud)
尽管这会产生预期的结果,但我不断收到警告:“正在尝试在 DataFrame 切片的副本上设置值”
我已经阅读了参考页面:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy但仍然无法解决这个问题。
我以为我已经在其他代码中解决了这个问题并解决了它,但是我在现有代码中找不到示例。
在最近的一次投票后,我在一年后重新发现了这个问题。自从被问到 Pandas 以来,我学到了很多,我想我会重新审视我的“切片副本”和解决方案的区别。
我最初的尝试是:
active_df['Active'].loc[active_df['Volume'] > 0] = 1
Run Code Online (Sandbox Code Playgroud)
这充其量只是一种令人费解的方式。
首先,我为 active_df['Volume'] > 0 获取布尔值,然后在行值为 TRUE 的情况下,我将切片 active_df['Active'] 设置为 1。虽然这有效,但不确定这是否是数据框的视图或副本。
解决方案是:
active_df.loc[active_df['Volume'] > 0, 'Active'] = 1
Run Code Online (Sandbox Code Playgroud)
在 active_df 数据框中,找到 active_df['Volume'] > 0 的行和列 'Active',并将这些值设置为 1。
或者以不同的方式表示:为“Volume”列中值为 0 的行的“Active”列设置值为 1。
所以你真的在处理整个数据帧(active_df.loc)而不是切片和可能的副本(active_df['Active'].loc)
再次感谢@Deena 提供解决方案。
| 归档时间: |
|
| 查看次数: |
3667 次 |
| 最近记录: |