我有幾個名稱序列的 csv 檔案,其中數字發生了變化
我需要呼叫一個函式來一次獲取所有這些檔案
我試圖這樣做:
names = ["orm_x_CXY_" str(i) ".csv" for i in range(0,40)]
函式定義如下
import pandas as pd
import numpy as np
def getBpms(filename, ipage):
twiss = pd.read_csv(filename, skiprows=1,
names=['s_pos', 'beta_x', 'beta_y', 'dx', 'dy', 'closed_orbitx', 'closed_orbity', 'element_type', 'elements_strength'],
header=None, index_col=0)
s = twiss.s_pos
x = twiss.closed_orbitx
y = twiss.closed_orbity
etype = twiss.element_type
xs = []
ys = []
i=0
for i in range(len(etype)):
if(etype[i] == 'BPM'):
xs.append('BPM' str(i))
ys.append('BPM' str(i))
return np.array(xs), np.array(ys)
當我嘗試使用“名稱”作為輸入呼叫函式時,如下所示
x, y =getBpms(names, 0)
我似乎進入了一個無限回圈并且沒有顯示輸出。
uj5u.com熱心網友回復:
您需要for filename in names:使用 'pd.read_csv()` 迭代每個檔案,如果您嘗試將多個 csv 連接到一個 DataFrame 中,那么您可以檢查這個問題:Import multiple csv files into pandas and concatenate into one DataFrame
import pandas as pd
import glob
path = r'C:\DRO\DCL_rawdata_files' # use your path
all_files = glob.glob(path "/*.csv")
li = []
for filename in all_files:
df = pd.read_csv(filename, index_col=None, header=0)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
我希望它是你的意思。
uj5u.com熱心網友回復:
我試著按照你提到的那樣做
li = [pd.read_csv(filename) for filename in names]
frame = pd.concat(li, axis=0, ignore_index=True)
然后我再次呼叫該函式
x, y =getBpms(frame, 0)
但我得到了錯誤
argument of type 'method' is not iterable
uj5u.com熱心網友回復:
您應該在函式中創建一個回圈getBpms來分別讀取檔案 pandas 沒有多個檔案讀取屬性。
...
for file_name in filename_list:
twiss = pd.read_csv(...)
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/441549.html
