将数据附加到 DataFrame

Append Data to DataFrame

我做了一个代码,其中我选择了 P 波地震波形,基本上是时间选择波形,还计算了信噪比和其他变量。

这是我的部分代码。

for tr in st:
    tr_cut = tr.trim(A, B) #cut the waveform from A to B section
#Here starts to compute the P time, Signal-to-noise, etc    
    scnl, picks, polarity, snr, uncert = picker.picks(tr_cut)
    all_ = []
for i in range(len(picks)):
    print (scnl, picks[i], polarity, snr, uncert) # this is the output
# Here I try to append the data inside a DataFrame
    all_.append(
        {
            'scnl': scnl,
            'picks': picks[i],
            'snr': snr,
            'polarity': polarity,
            'uncert': uncert
         }
     )
     pd.DataFrame(all_)

但我无法附加我在此处指定的函数的输出

scnl, picks, polarity, snr, uncert = picker.picks(tr_cut)

但是,如果我打印函数的输出,我会得到结果

print (scnl, picks[i], polarity, snr, uncert) gives an output like this:

BBOJ.SHZ.BO., UTCDateTime(2020, 11, 10, 13, 9, 59, 200000), '', 8.1999993, 0.02 
BBOD.SHZ.BO., UTCDateTime(2020, 11, 10, 13, 10, 4, 260000), 'D', 9.5, 0.02 
BBOB.SHZ.BO., UTCDateTime(2020, 11, 10, 13, 10, 7, 620000), 'C', 8.90004, 0.040000

我的想法是将所有这些输出附加到 DataFrame 中,但我做不到。此外,当我尝试将我的 DataFrame 转换为 CSV 时,出现以下错误。

'list' object has no attribute 'to_csv'

你介意给我反馈我做错了什么吗,谢谢 托尼诺

追加时您是否收到任何错误或根本无法正常工作?根据当前信息,执行以下操作似乎可以解决您的问题:

您必须将数据框分配给某个变量(例如 df)。此外,在完成对 all_ 的迭代后,您似乎还想创建数据框。如果是这种情况,您需要执行以下分配 outside for loop.

df = pd.DataFrame(all_)

关于你的第二个错误,看来你已经试过了all_.to_csv()。由于 all_ 是一个列表,因此 to_csv 将不起作用。你可能想要做 df.to_csv().

为了让它工作,我根据@Deep 的建议修改了一些代码。

all_ = []
for tr in st:
    tr_cut = tr.trim(A, B) #cut the waveform from A to B section
#Here starts to compute the P time, Signal-to-noise, etc    
    scnl, picks, polarity, snr, uncert = picker.picks(tr_cut)
   
for i in range(len(picks)):
    print (scnl, picks[i], polarity, snr, uncert) # this is the output
# Here I try to append the data inside a DataFrame
    all_.append(
        {
            'scnl': scnl,
            'picks': picks[i],
            'snr': snr,
            'polarity': polarity,
            'uncert': uncert
         }
     )
     df = pd.DataFrame.from_dict(all_, orient='columns')
     df.to_csv("Picks.csv")

将变量 all_ = [] 移到第一个循环之外解决了我的问题