Как объединить большое количество фреймов данных? - PullRequest
0 голосов
/ 14 января 2020

У меня много .txt файлов в папке. Например, каждый файл .txt выглядит следующим образом.

FileA = pd.DataFrame({'Id':["a","b","c"],'Id2':["a","b","z"],'Amount':[10, 30,50]})
FileB= pd.DataFrame({'Id':["d","e","f","z"],'Id2':["g","h","i","j"],'Amount':[10, 30,50,100]})
FileC= pd.DataFrame({'Id':["r","e"],'Id2':["o","i"],'Amount':[6,33]})
FileD...

Я хочу извлечь первую строку каждого кадра данных в папке, а затем объединить их все. Итак, что я сделал ниже.

Чтобы составить список текстовых файлов, я сделал следующее.

txtfiles = []
for file in glob.glob("*.txt"):
    txtfiles.append(file)  

Чтобы извлечь первую строку и объединить их все, я сделал это ниже.

pd.read_table(txtfiles[0])[:1].append([pd.read_table(txtfiles[1])[:1],pd.read_table(txtfiles[2])[:1]],pd.read_table.......)

Если номер txt. файлов мало, я могу сделать это таким образом, но если есть много файлов .txt, мне нужен метод автоматизации. Кто-нибудь знает, как это автоматизировать? Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 14 января 2020

Основано на ответе Сида на это сообщение :

input_path = r"insert/your/path" # use the patk where you stored the txt files
all_files = glob.glob(os.path.join(input_path, "*.txt"))     
df_from_each_file = (pd.read_csv(f, nrows=1) for f in all_files)
concatenated_df = pd.concat(df_from_each_file, ignore_index=True)

Обновление Использование pd.read_csv неправильно загружало файл. Замена read_csv на read_table должна дать ожидаемые результаты

input_path = r"insert/your/path" # use the patk where you stored the txt files
all_files = glob.glob(os.path.join(input_path, "*.txt"))     
df_from_each_file = (pd.read_table(f, nrows=1) for f in all_files)
concatenated_df = pd.concat(df_from_each_file, ignore_index=True)
...