Проблемы с определением переменных внутри функции, но не глобально
Я пытался создать цикл для общего анализа данных с двумя столбцами, один с отметкой времени, а другой с данными вибрации. Когда я проводил этот анализ только с одним из регистров вибрации, после завершения процесса ошибок не возникало. Затем, когда я определил функцию для запуска цикла, все начало разваливаться.
Код находится в каталоге с 12 файлами CSV. Каждый из этих файлов именуется следующим образом:
"EA01_VGT_g.csv"
"EA02_VGD_g.csv"
"EA03_VHSS-R_g"...
Для меня важны только 4 первых персонажа. Итак, я создал функцию, которая получает все файлы в этом каталоге и считывает их в фрейм данных pandas, назначая этот фрейм данных переменной, имя которой состоит только из этих 4 букв. Таким образом, первый фрейм данных - "EA01", содержащий 2 столбца и 80000 строк, второй - "EA02" и так далее.
После этого я хочу переименовать все эти фреймы данных по своему вкусу. Но проблема возникает до того, как я их переименую.
Вот мой код:
def get_raw_data_arrays():
listOfFiles = os.listdir('.')
pattern = '*.csv'
for entry_ in listOfFiles:
if (fnmatch.fnmatch(entry_, pattern)):
name = entry_[0:4]
exec('%s = pd.read_csv(entry_, header = None, skiprows = 3)'% (name))
print(name)
exec('print(%s)'%name)
print(EA01)
#renamining the data
Time = EA01[0].values #Timestamp
Итак, когда я запустил его, результат был следующим:
EA01
0 1
0 0.00000 0.293472
1 0.00005 -0.155880
2 0.00010 -0.211725
3 0.00015 0.208446
4 0.00020 0.147366
5 0.00025 -0.037939
6 0.00030 -0.007746
7 0.00035 -0.010103
8 0.00040 -0.172579
9 0.00045 -0.170484
10 0.00050 0.014789
11 0.00055 0.123960
12 0.00060 -0.013161
13 0.00065 -0.118511
14 0.00070 0.091304
15 0.00075 0.060608
16 0.00080 -0.005187
17 0.00085 0.159849
18 0.00090 -0.008565
19 0.00095 -0.282582
20 0.00100 -0.156607
21 0.00105 -0.094830
22 0.00110 -0.289329
23 0.00115 -0.132922
24 0.00120 -0.009114
25 0.00125 0.001120
26 0.00130 -0.046861
27 0.00135 -0.093562
28 0.00140 0.138567
29 0.00145 0.298724
... ... ...
79970 3.99850 0.053518
79971 3.99855 0.198572
79972 3.99860 0.272537
79973 3.99865 0.052110
79974 3.99870 0.146348
79975 3.99875 0.196680
79976 3.99880 0.076310
79977 3.99885 0.000660
79978 3.99890 -0.101029
79979 3.99895 -0.047750
79980 3.99900 0.087276
79981 3.99905 0.015065
79982 3.99910 0.124121
79983 3.99915 0.155159
79984 3.99920 0.243944
79985 3.99925 0.143467
79986 3.99930 0.151828
79987 3.99935 0.253886
79988 3.99940 0.267933
79989 3.99945 -0.142500
79990 3.99950 0.140949
79991 3.99955 0.179306
79992 3.99960 -0.233137
79993 3.99965 0.047328
79994 3.99970 0.327770
79995 3.99975 0.181512
79996 3.99980 0.225626
79997 3.99985 0.005573
79998 3.99990 -0.039867
79999 3.99995 0.251403
[80000 rows x 2 columns]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-18-c9fa1e175186> in get_raw_data_arrays()
10 print(name)
11 exec('print(%s)'%name)
---> 12 print(EA01)
13
14 #Renaming the data
NameError: name 'EA01' is not defined
Как может "EA01" не определен, если когда я печатаю его с помощью функции exec(), это так? Если я не распечатаю его (что я делал для отладки), та же проблема появится, когда я переименую его в "Время".
Как я уже говорил, когда я запускаю этот код без определения функции, он работает нормально. Кто-нибудь может мне помочь?