我有一個基于關鍵字的材料資料檔案。我想決議這個檔案中的資料并創建變數和矩陣以在 Python 腳本中處理它們。材料檔案的最頂部可能有以字串“**”開頭的注釋行,我只是想忽略這些并決議 *keyword_1 形式的關鍵字后面的其他行上的資料,以及它們的逗號分隔引數形式為 param_1=param1。

用 Python 從這種基于關鍵字的文本檔案中決議資料的最快和最簡單的方法是什么?我可以為此使用熊貓嗎?如何使用?
下面是一個示例輸入材料檔案:alloy_1.nam
*************************************************
** ALLOY_1 MATERIAL DATA
*************************************************
*MATERIAL,NAME=ALLOY_1
*ELASTIC,TYPE=ISO
2.08E5,0.3,291.
2.04E5,0.3,422.
1.96E5,0.3,589.
1.85E5,0.3,755.
1.74E5,0.3,922.
1.61E5,0.3,1089.
1.52E5,0.3,1220.
*EXPANSION,TYPE=ISO,ZERO=293.
13.5E-6,291.
13.6E-6,422.
13.9E-6,589.
14.2E-6,755.
14.7E-6,922.
15.5E-6,1089.
16.4E-6,1200.
*DENSITY
7.92E-9
*CONDUCTIVITY
10.,273.
18.,873.
27.,1373.
*SPECIFIC HEAT
450.e6,273.
580.e6,873.
710.e6,1373.
uj5u.com熱心網友回復:
方法是創建一個字典串列,其中每個元素是一個鍵 = 類別名稱和資料框形式的資料。我們必須使用臨時字典來存盤逗號分隔的資料,每次找到新類別時,這些資料都會附加到字典串列中。
使用pandas.Dataframe()創建資料框
下面是代碼:
with open('/Users/rpghosh/scikit_learn_data/test.txt') as f:
lines = f.readlines()
# empty list of dataframes
lst_dfs = []
# empty dictionary to store each dataframe temporarily
d = {}
dfName = ''
PrevdfName = ''
createDF = False
for line in lines:
if re.match('^\*{1}([A-Za-z0-9,=]{1,})\n$', line):
variable = line.lstrip('*').rstrip().split(',')
PrevdfName = dfName
dfName = variable[0]
createDF = False
if (not createDF) and len(d) > 0:
df = pd.DataFrame(d)
# append a dictionary which has category and dataframe
lst_dfs.append( { PrevdfName : df} )
d = {}
elif re.match('^[0-9]([0-9,]){1,}\n$',line):
#dfName = PrevdfName
data = line.rstrip().split(',')
for i in range(len(data)):
# customised column name
colName = 'col' str(i 1)
# if the colname is already present in the
# dictionary keys then append the element
# to existing key's list
if colName in d.keys():
d[colName].append( data[i])
else:
d[colName] = [data[i]]
else:
createDF = False
d={}
df = pd.DataFrame(d)
lst_dfs.append({ dfName : df})
要查看輸出,您將有一個資料框串列,因此代碼將是 -
for idx, df in enumerate(lst_dfs):
print(f"{idx=}")
print(df)
print()
輸出 :
idx=0
{'elastic': col1 col2 col3
0 21 22 23
1 11 12 13
2 31 32 33}
idx=1
{'expansion': col1 col2 col3
0 4 5 6
1 41 15 16
2 42 25 26}
idx=2
{'density': col1
0 12343}
idx=3
{'conductivity': col1 col2 col3 col4 col5 col6
0 54 55 56 51 55 56
1 42 55 56 51 55 56
2 54 55 56 51 55 56
3 42 55 56 51 55 56}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/436613.html
上一篇:ActivityCompat.requestPermissions()請求的可接受權限是什么?
下一篇:使用pegen開發決議器:無輸出
