#python #pandas #csv
#python #pandas #csv
Вопрос:
Здесь я столкнулся с реальной проблемой, которую я не могу решить.
Я беру 7 файлов .txt, удаляю первую строку из каждого (я хочу добавить свои собственные заголовки) и объединяю их в один файл .txt. Я был успешным вплоть до этой части. Часть, с которой у меня возникли проблемы, — это изменение его на csv / xlsx, который разделяется на столбцы при просмотре в Excel. Прямо сейчас он просто помещает все в одну строку.
Вот мой код на данный момент.
path = r'C:UsersrockDesktopworkspaceDTH'
all_files = glob.glob(path "/*.TXT")
li = []
for filename in all_files:
lines = open(filename).readlines()
open(filename, 'w').writelines(lines[1:])
df = pd.read_csv(filename, index_col=False, header=None)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True,)
frame.to_csv("Test.csv", index=False)
frame.to_excel("test2.xlsx")
Я приложил пример изображения, которое я получаю с моим выводом.
Данные скопированы из .txt ниже:
WEST 26/10/2020 13:00:00 13:06:16 01:00:00 FRUIT HELLO GOODBYE Done Sub 13:00:00 13:06:16 00:06:16
WEST 26/10/2020 19:00:00 19:00:42 00:30:00 VEGGIES CARROT POTATO Done Sub 19:00:00 19:00:42 00:00:42
Заранее спасибо за любую помощь. Очень признателен.
Комментарии:
1. Похоже, что pandas не анализирует ваши файлы как фреймы данных. Мы не знаем содержимого ваших
.txt
файлов, но, похоже, у них есть значения, разделенные символомt
табуляции. Попробуйте добавить именованный аргументsep='t'
в своюpd.read_csv
функцию. Если это не сработает, возможно, вы могли бы предоставить нам образец ваших данных в виде текста, а не в виде изображения.2. Я пробовал
sep='t'
, и это не сработало. Это может быть глупый вопрос, но как мне прикрепить копию файлов .txt, с которыми я работаю?
Ответ №1:
Попробуйте это :
path = r'C:UsersrockDesktopworkspaceDTH'
all_files = glob.glob(path "/*.TXT")
li = []
for filename in all_files:
lines = open(filename).readlines()
open(filename, 'w').writelines(lines[1:])
df = pd.read_csv(filename, delimiter = ',', header=None)
li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)
frame.to_csv("Test.csv", index=None)
frame.to_excel("test2.xlsx")
Таблица CSV должна иметь разделитель символов, чтобы иметь возможность разделять каждую строку.
Комментарии:
1. Я все еще получаю те же результаты при попытке выше.
Ответ №2:
Данные Excel не были разделены на столбцы (т. Е. Все данные находятся в столбце A); возможно, файл фиксированной ширины был импортирован в Excel. Вот один из подходов, использующий текстовые данные в исходном сообщении:
from io import StringIO
import pandas as pd
data = '''
WEST 26/10/2020 13:00:00 13:06:16 01:00:00 FRUIT HELLO GOODBYE Done Sub 13:00:00 13:06:16 00:06:16
WEST 26/10/2020 19:00:00 19:00:42 00:30:00 VEGGIES CARROT POTATO Done Sub 19:00:00 19:00:42 00:00:42
'''
df = pd.read_csv(StringIO(data), sep='ss ', engine='python', header=None)
print(df.transpose())
0 1
0 WEST WEST
1 26/10/2020 13:00:00 26/10/2020 19:00:00
2 13:06:16 19:00:42
3 01:00:00 00:30:00
4 FRUIT VEGGIES
5 HELLO CARROT
6 GOODBYE POTATO
7 Done Done
8 Sub Sub
9 13:00:00 19:00:00
10 13:06:16 19:00:42
11 00:06:16 00:00:42
Комментарии:
1. Похоже, что это фиксированная ширина из текстового файла, однако это не совсем тот результат, который я ищу. Я пытался получить его все еще в пределах его 12 столбцов
2. У меня есть двенадцать столбцов — мои результаты просто транспонированы, поэтому они подходят без переноса.
3.Похоже, это не работает с фреймом данных, я попробовал:
frame = pd.concat(li, axis=0, ignore_index=True)
cf = pd.read_csv(StringIO(frame), sep='ss ', engine='python', header=None)
и получил ошибкуTypeError: initial_value must be str or None, not DataFrame
4. На самом деле вам просто нужно добавить
sep=ss , engine='python'
в свойpd.read_csv
Ответ №3:
Я смог решить эту проблему, выполнив следующее:
column_headers = [list of header names]
df = pd.read_table(filename,sep=r"[ ]{2,}", header=None, skiprows=1, engine='python', names=column_headers)
Спасибо тем, кто представил несколько возможных решений, чтобы попробовать