#python #excel #pandas
Вопрос:
Все файлы имеют соглашение об именах, например NPS_Platform_FirstLabel_Session_Language_Version.xlsx Я хочу иметь дополнительные столбцы, такие как Платформа, Первая метка, Сессия, Язык, версия, это будут имена столбцов и значения, определяемые именами файлов. Я закодировал следующее, это работает, но значение добавленных столбцов только что получено из последнего файла. Например, предположим, что последнее имя файла NPS_MEM_GAIT_Science_EN_10.xlsx. Поэтому все добавленные значения столбцов-это MEM, GAIT_Science и т. Д. Не соответствующие имена файлов.
import glob
import os
import pandas as pd
path = "C:/Users/User/blabla"
all_files = glob.glob(os.path.join(path, "*.xlsx")) #make list of paths
df = pd.DataFrame()
for f in all_files:
data = pd.read_excel(f)
df = df.append(data)
file_name = os.path.splitext(os.path.basename(f))[0]
nameList = []
nameList = file_name.rsplit('_')
df['Platform'] = nameList[1]
df['First label']= nameList[2]
df['Session'] = nameList[3]
df['Language'] = nameList[4]
df['Version'] = nameList[5]
df
Я начал со списка имен[1], так как я не хочу NPS.
Есть какие-либо предложения или отзывы?
Ответ №1:
Я нашел решение, я оставляю его здесь, так как просмотров больше, чем я ожидал.
import glob
import os
import pandas as pd
path = "C:/Users/User/....."
all_files = glob.glob(os.path.join(path, "*.xlsx")) #make list of paths
df_files= [pd.read_excel(filename) for filename in all_files]
for dataframe, filename in zip(df_files, all_files):
filename =os.path.splitext(os.path.basename(filename))[0]
filename = filename.rsplit('_')
dataframe['Platform'] = filename[1]
dataframe['First label']= filename[2]
dataframe['Session'] = filename[3]
dataframe['Language'] = filename[4]
dataframe['Version'] = filename[5]
df= pd.concat(files_df, ignore_index=True)
Я думаю, причина в том, что я просто перебирал файлы, а не фрейм данных, который я пытался создать. С помощью этого я могу одновременно перебирать фрейм данных и имена файлов. Я нашел это решение на https://jonathansoma.com/lede/foundations-2017/classes/working-with-many-files/class/
Но все же, если вы можете дать четкий ответ о том, почему первый код работает не так, как я хочу, было бы здорово