我在 python 中有以下物件型別,資料物件中有幾個條目,就像下面的一樣。
> G1 \
jobname
x [3.3935e-06, 6.099100000000001e-06, 8.8048e-06...
y [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14...
yerr [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
xfit [3.3935e-06, 4.0631e-06, 4.7327000000000004e-0...
yfit [-0.0215695613, -0.0215695613, -0.0215695613, ...
xlabel Pulse Time (s)
ylabel Avg Counts
params [-3.6475000000000002e-06, -0.0026722969, -3.20...
x0 -374.2
x0_err 1.124e 07
我已經能夠使用以下代碼更改結構,但我希望能夠以更簡潔的方式做到這一點。我嘗試了串列理解,但這似乎并不干凈。我也不想在初始化類之前創建所有的 empyy 串列。
class change_dataframe():
def flatten(l):
return [item for sublist in l for item in sublist]
def process_data(data, zones:list):
for zone in zones:
for x in df[zone]['x']:
zone_list.append(zone)
xdata_append.append(df[zone]['x'])
ydata_append.append(df[zone]['y'])
xfit_append.append(df[zone]['xfit'])
yfit_append.append(df[zone]['yfit'])
xdata = flatten(xdata_append)
ydata = flatten(ydata_append)
xfit = flatten(xfit_append)
yfit = flatten(yfit_append)
data = pd.DataFrame({'zones':zone_list,'x':xdata, 'y':ydata})
fit_data = pd.DataFrame({'xfit':xfit, 'yfit':yfit})
return fit_data, data
# x_data, y_data = process_data(df,zones)
if __name__ == "__main__":
xdata_append = []
xfit_append = []
ydata_append = []
yfit_append = []
zone_list = []
zones = ['G1','G2','G3','G4','G5']
data = change_dataframe.process_data(df,zones)
print(data)
# zones_list = flatten(zones_append)
任何幫助將不勝感激。
uj5u.com熱心網友回復:
你寫了
def process_data(data, zones:list):
但作者的意圖顯然是
def process_data(df, zones:list):
我們是在撰寫接受self引數的類方法,還是在這里撰寫頂級函式?
盡管flattenPEP -8要求您命名形參lst而不是l.
flatten 的重復應用似乎非常適合map( ... )呼叫,也許是使用 tuple unpack。
頂級的全球名單有點災難。你已經有課了。通過使它們成為實體變數來消除全域變數,例如self.zone_list.
另外,_append后綴不是很好,考慮省略它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532394.html
上一篇:如何將文本與元素的開頭對齊
下一篇:使用boost決議日志檔案
