У меня есть большое количество двумерных файлов, из которых я вычисляю параметр XX, как указано ниже.
'2019-10-12_17-43.csv',
'2019-10-12_17-42.csv',
'2019-10-12_17-41.csv',
'2019-10-12_17-44.csv',
'2019-10-12_17-40.csv',
'2019-10-11_17-40.csv',
......................
and so on...
Я могу создать список имен файлов и рассчитать параметр XX для этого конкретный файл. После последующих вычислений я создаю фрейм данных с именем YY, который содержит параметр вместе со столбцом, содержащим имена файлов, из которых он был рассчитан. Исходя из определенного значения рассчитанного параметра XX, я хотел бы построить все 2-мерные данные, которые его вызывают. Я также создаю список имен файлов из столбца фрейма данных. Очевидно, что код длиннее до вычисления параметра XX, но для чтения данных из выбранных имен файлов в списке я использую следующий код в последнем блоке:
# arbitrary functions
def Aval (a, b):
..............
def Bval (a, b):
..............
file_path = r"C:\Users\Desktop\Data"
read_files = glob.glob(os.path.join(file_path,"*.csv"))
# generating the list of filenames
file_list = []
XYZ_array = []
ABC_array = []
for (root, dirs, files) in os.walk(file_path):
for filenames in files:
file_list.append(filenames)
df= pd.read_csv(os.path.join(root, filenames), header=0)
#Calculation from the files
ABC = ..................
XYZ = ..................
ABC_array.append(ABC)
XYZ_array.append(XYZ)
#creating a dataframe from the arrays
newdf = pd.DataFrame ({'ABC': ABC_array, 'XYZ':XYZ_array, 'Filename':file_list })
Сгенерированный кадр данных выглядит следующим образом:
Timestamp ABC XYZ Filename
2019-10-11_07-52 1.934985 0.187962 2019-10-11_07-52.csv
2019-10-11_07-53 1.926435 0.200828 2019-10-11_07-53.csv
2019-10-11_07-54 1.922927 0.215204 2019-10-11_07-54.csv
2019-10-11_07-55 1.951818 0.216678 2019-10-11_07-55.csv
2019-10-11_07-56 1.922523 0.245144 2019-10-11_07-56.csv
... ... ... ...
2019-10-13_18-21 2.028409 1.149067 2019-10-13_18-21.csv
2019-10-13_18-22 2.027896 1.015862 2019-10-13_18-22.csv
2019-10-13_18-23 2.013004 0.871320 2019-10-13_18-23.csv
2019-10-13_18-24 1.991576 0.755164 2019-10-13_18-24.csv
2019-10-13_18-25 1.908259 0.570786 2019-10-13_18-25.csv
Значения AB C сгруппированы в три ячейки с ячейками = [1.76,1.86,1.96]
Abc_sorted = newdf.sort_values('ABC')
Abc_sorted['Bin_names'] = pd.cut(Abc_sorted['ABC'], bins, labels=['1.76','1.86','1.96'])
T_df = Abc_sorted.sort_values(by=['Bin names']).dropna()
приводит к кадру данных, подобному:
Timestamp ABC XYZ Filename Bin_names
2019-10-12_17-43 1.769676 72.841836 2019-10-12_17-43.csv 1.76
2019-10-12_17-42 1.771429 74.583635 2019-10-12_17-42.csv 1.76
2019-10-12_17-41 1.774526 76.104981 2019-10-12_17-41.csv 1.76
2019-10-12_17-44 1.774678 68.314091 2019-10-12_17-44.csv 1.76
2019-10-12_17-40 1.779273 76.589191 2019-10-12_17-40.csv 1.76
... ... ... ... ... ... ... ... ... ...
2019-10-12_09-48 1.988249 85.279987 2019-10-12_09-48.csv 1.96
2019-10-13_09-04 1.988266 28.716690 2019-10-13_09-04.csv 1.96
2019-10-12_11-27 1.988597 76.978562 2019-10-12_11-27.csv 1.96
2019-10-11_16-19 1.985438 76.343396 2019-10-11_16-19.csv 1.96
2019-10-11_08-11 1.999933 0.251199 2019-10-11_08-11.csv 1.96
Новый фрейм данных создается на основе bin_name 1.76 и имен файлов как, а список, содержащий имена файлов, создается как:
ndf = T_df.loc[Total_df.Bin_names =='1.76'][['Filename', 'Bin_names']]
filename_list=ndf['Filename'].tolist()
, что приводит к фрейму данных как:
Filename Bin_names
2019-10-12_17-43.csv 1.76
2019-10-12_17-42.csv 1.76
2019-10-12_17-41.csv 1.76
2019-10-12_17-44.csv 1.76
2019-10-12_17-40.csv 1.76
Теперь основная задача импортировать файлы в filename_list из основного каталога:
for i in range(len(filename_list)):
print (filename_list[i])
for file in read_files:
if fnmatch.fnmatch(file, filename_list[i]):
print(file)
, где read_files
- путь, file
- имя файла в пути, а filename_list
- список, содержащий несколько файлов. , Я связал данные с 3 различными значениями и хочу импортировать только те файлы, которые дают значение параметра AB C 1,76. Но это не похоже на работу и ничего не возвращается. Может ли кто-нибудь помочь?