[英]append rows from a 'for loop' to a dataframe using pd.concat with python
更新后,我收到以下消息:
'frame.append 方法已弃用,将在未来版本中从 pandas 中删除。 请改用 pandas.concat。
我无法用pd.concat()而不是df.append()重写我的代码。 请帮忙!
我正在进行一个人造星实验,其中我有三个带有列的文件:
b1: ['Id', 'x', 'y', 'bmag'] - 带有 b 过滤器的人造星
i1: ['Id', 'x', 'y', 'imag'] - 带有 I-filter 的人造星
biart: ['Id', 'x', 'y', 'bmag', 'imag'] - 测量的星星
如果满足最小距离,我通过保留两个文件的“Id”、“bmag”和“imag”来计算 b1(人造)和 biart(测量)中恒星之间的最小径向距离。
extract = pd.DataFrame(columns=['Id_art', 'x_art', 'y_art',
'bmag_art', 'imag_art',
'dist_d',
'Id_meas', 'x_meas', 'y_meas',
'bmag_meas', 'imag_meas'])
for i in range(len(b1.index)):
x = b1['x'].iloc[i]
y = b1['y'].iloc[i]
dist = np.sqrt((x - biart['x'])**2 + (y - biart['y'])**2)
if (min(dist))<=1/2:
print(b1['Id'].iloc[i],
b1['x'].iloc[i],
b1['y'].iloc[i],
b1['bmag'].iloc[i],
i1['imag'].iloc[i],
min(dist),
biart['Id'].iloc[dist.idxmin()],
biart['x'].iloc[dist.idxmin()],
biart['y'].iloc[dist.idxmin()],
biart['bmag'].iloc[dist.idxmin()],
biart['imag'].iloc[dist.idxmin()])
extract = extract.append({'Id_art': b1['Id'].iloc[i],
'x_art':b1['x'].iloc[i],
'y_art': b1['y'].iloc[i],
'bmag_art':b1['bmag'].iloc[i],
'imag_art':i1['imag'].iloc[i],
'dist_d':min(dist),
'Id_meas':biart['Id'].iloc[dist.idxmin()],
'x_meas':biart['x'].iloc[dist.idxmin()],
'y_meas':biart['y'].iloc[dist.idxmin()],
'bmag_meas':biart['bmag'].iloc[dist.idxmin()],
'imag_meas':biart['imag'].iloc[dist.idxmin()]},
ignore_index=True)
如何将下面的代码重写为 pd.concat()?
extract.append({'Id_art': b1['Id'].iloc[i],
'x_art':b1['x'].iloc[i],
'y_art': b1['y'].iloc[i],
'bmag_art':b1['bmag'].iloc[i],
'imag_art':i1['imag'].iloc[i],
'dist_d':min(dist),
'Id_meas':biart['Id'].iloc[dist.idxmin()],
'x_meas':biart['x'].iloc[dist.idxmin()],
'y_meas':biart['y'].iloc[dist.idxmin()],
'bmag_meas':biart['bmag'].iloc[dist.idxmin()],
'imag_meas':biart['imag'].iloc[dist.idxmin()]},
ignore_index=True)
``
将数据框更改为列表,并让pd.DataFrame
构造函数在最后使用列表:
# Make a list first
extract = []
for i in range(len(b1.index)):
x = b1['x'].iloc[i]
y = b1['y'].iloc[i]
dist = np.sqrt((x - biart['x'])**2 + (y - biart['y'])**2)
if (min(dist))<=1/2:
print(b1['Id'].iloc[i], b1['x'].iloc[i], b1['y'].iloc[i],
b1['bmag'].iloc[i], i1['imag'].iloc[i],
min(dist),
biart['Id'].iloc[dist.idxmin()],
biart['x'].iloc[dist.idxmin()],
biart['y'].iloc[dist.idxmin()],
biart['bmag'].iloc[dist.idxmin()],
biart['imag'].iloc[dist.idxmin()])
# Append to the list here
extract.append({'Id_art': b1['Id'].iloc[i],
'x_art':b1['x'].iloc[i],
'y_art': b1['y'].iloc[i],
'bmag_art':b1['bmag'].iloc[i],
'imag_art':i1['imag'].iloc[i],
'dist_d':min(dist),
'Id_meas':biart['Id'].iloc[dist.idxmin()],
'x_meas':biart['x'].iloc[dist.idxmin()],
'y_meas':biart['y'].iloc[dist.idxmin()],
'bmag_meas':biart['bmag'].iloc[dist.idxmin()],
'imag_meas':biart['imag'].iloc[dist.idxmin()]})
然后,在循环完成填充列表后:
# Consume the data here
extract = pd.DataFrame(extract)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.