私は物理プロジェクトをやっていて、何かをプロットしたいと思っています。私はすべてのファイルから平均を取り、それらの平均をプロットしたいと思います。これらのファイルを読み込むために、globを使用しました。これにより、データの順序全体が台無しになりました。そして、「ソート済み」を使おうとすると、うまくいきません。これが私のコードです:
#importeren van libraries
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import glob
#definieren van de lijsten
i = 0
R1 = []
I1 = []
U1 = []
stdI = []
stdU = []
lijst = glob.glob('*.txt')
lijst = sorted(lijst)
#loop aanmaken
for i in lijst:
try:
# data inlezen
data = pd.read_csv(i, skiprows=5, delimiter='\t',
names=['Time', 'Voltage', 'Current'], decimal=',')
except:
print('fout gegaan bij',i )
# kolommen definieren
t = data['Time']
U = data['Voltage']
I = data['Current']
Ug = np.mean(U)
stdUg = np.std(U)
Ig = np.mean(I)
stdIg = np.std(I)
R = (Ug / Ig)
R1.append(R)
stdI.append(stdIg)
stdU.append(stdUg)
I1.append(Ig)
U1.append(Ug)
R1 = np.array(R1)
stdI = np.array(stdI)
stdU = np.array(stdU)
Irel = (stdI/Ig)
Urel = (stdU/Ug)
stdR = R*(Irel+Urel)
並べ替える方法は次のとおりです。
'0A.txt',
'10A.txt',
'11A.txt',
'12A.txt',
'13A.txt',
'14A.txt',
'15A.txt',
'16A.txt',
'17A.txt',
'18A.txt',
'19A.txt',
'1A.txt',
'20A.txt',
'21A.txt',
'22A.txt',
1-22からではなく
このsorted
関数は、いくつかのオプションの引数を取ります。これらの1つは、「各リスト要素から比較キーを抽出するために使用される1つの引数の関数を指定する」「key 」です。したがって、その関数を使用してファイル名を数値に変換し、その数値を返すことができます。私はそれを行うために正規表現を使用します:
lijst = sorted(lijst, key=lambda x: int(re.sub("[^0-9]","", x)))
この関数は引数を取り、x
すべての非数字を取り除き、整数を返します。例:"1A.txt"
-> 1
。これは戻ります
['0A.txt', '1A.txt', '10A.txt', '11A.txt', '12A.txt', '13A.txt', '14A.txt', '15A.txt', '16A.txt', '17A.txt', '18A.txt', '19A.txt', '20A.txt', '21A.txt', '22A.txt']
同様の手法を使用して、リスト内の各ファイル名を番号にマップできます。
lijst= list(map(lambda x: int(re.sub("[^0-9]","", x)), lijst))
map
関数からの戻り値はリストに変換されます。これは戻ります
[0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加