gpt4 book ai didi

python - Pandas 数据框中单元格中的条件更改值

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:21 25 4
gpt4 key购买 nike

我想将开盘价、最高价和最低价的 NaN 值替换为与收盘价相同。但是,仅当更改为 0.00

时才应用此条件

下面是我的代码

try:
url = 'https://api.iextrading.com/1.0/stock/AAME/chart/1y'
q_data = pd.read_json(url)
if q_data.change == 0.00:
q_data.open = q_data.close
q_data.high = q_data.close
q_data.low = q_data.close
except Exception:
print "No data"
continue

问题是 try 循环被绕过并转到 except 循环。如何正确更改数据?

最佳答案

这是构建逻辑的一种方式。 fillna 没有内置函数依赖于其他列,但您可以通过组合 bool 数组来达到相同的结果:

df = pd.read_json('file.json')

mask = (df['change'] == 0).values

for col in ['open', 'high', 'low']:
col_mask = mask & df[col].isnull().values
df.loc[col_mask, col] = df.loc[col_mask, 'close']

性能基准测试

循环比明显的向量化方法更快。一些 pandas 专家可能能够阐明性能差异。来自@jezrael 的数据。

df = pd.DataFrame({'close':[100] * 6,
'open':[4,5,4,5,np.nan,4],
'high':[np.nan,8,9,4,2,3],
'low':[1,3,5,7,np.nan,np.nan],
'change':[0,3,6,9,0,4]})

df = pd.concat([df]*10000)

def jp(df):
mask = (df['change'] == 0).values

for col in ['open', 'high', 'low']:
col_mask = mask & df[col].isnull().values
df.loc[col_mask, col] = df.loc[col_mask, 'close']
return df

def jez(df):
cols = ['open', 'high', 'low']
m = df[cols].isnull().values & (df['change'] == 0).values[:, None]
df[cols] = df[cols].mask(m, df['close'], axis=0)
return df

%timeit jp(df) # 9.09 ms
%timeit jez(df) # 13.4 ms

关于python - Pandas 数据框中单元格中的条件更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50316927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com