簡體   English   中英

使用 pd.concat 和 python 將“for循環”中的行附加到數據幀

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM