[英]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.