将数据附加到 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_ = []
移到第一个循环之外解决了我的问题
我做了一个代码,其中我选择了 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_ = []
移到第一个循环之外解决了我的问题