Прочитать файл без разделителя между строками - PullRequest
0 голосов
/ 05 августа 2020

У меня невероятно очевидный вопрос, но я не могу найти решение pandas ( Я нашел это , это близко).

В моем текстовом файле нет разделителя строк. Таким образом, pandas читает файл как фрейм данных с единственной строкой и множеством столбцов. Это выглядит следующим образом:

header_1, header_2, header_3, 1, jan, 600, 2, feb, 900, 3, jan, 678

Я хочу читать три элемента в строке. Конечный результат должен выглядеть следующим образом:

header_1  header_2  header_3
       1       jan       600
       2       feb       900
       3       jan       678

Как мне указать файлу читать каждую третью запятую как разрыв строки?

Ответы [ 4 ]

0 голосов
/ 05 августа 2020

Предполагается, что первая пара записей - это имена столбцов. Вы можете split текст, найти количество заголовков и разделить остальные данные, чтобы они соответствовали количеству заголовков:

data = """header_1, header_2, header_3, 1, jan, 600, 2, feb, 900, 3, jan, 678"""

header = [head.strip() for head in data.split(',') if head.strip().startswith('header')]
rest = [head.strip() for head in data.split(',') if not head.strip().startswith('header')]

rest = [rest[n:n+length] for n in range(0, len(rest), len(header)]
pd.DataFrame(rest, columns = header)



 header_1   header_2    header_3
0   1         jan         600
1   2         feb         900
2   3         jan         678
0 голосов
/ 05 августа 2020

Используйте **Split function** с последующим нарезанием, чтобы создать фрейм данных

a="header_1, header_2, header_3, 1, jan, 600, 2, feb, 900, 3, jan, 678"
a=a.split(",")
a1=[]
a2=[]
a3=[]
for i in range(0,len(a)):
    if(i%3==2):
        a1.append(a[i])
    elif(i%3==1):
        a2.append(a[i])
    else:
        a3.append(a[i])
    data={a3[0]:a3[1:],a2[0]:a2[1:],a1[0]:a1[1:]}
df=pd.DataFrame(data)
    

Вывод

    header_1       header_2           header_3
0   1              jan                    600
1   2              feb                    900
2   3              jan                    678
0 голосов
/ 05 августа 2020

Для этого не требуется pandas, вы можете просто использовать собственный python. Если файл хорошо отформатирован, например, как вы написали

header_1, header_2, header_3, 1, jan, etc

, вы можете просто использовать строковые методы, такие как разделение и реорганизацию списка в желаемую форму 2D-массива. Оттуда вы можете создать свой фрейм данных, если хотите использовать pandas позже.

0 голосов
/ 05 августа 2020

Может хватит стандартного str.split():

txt = '''header_1, header_2, header_3, 1, jan, 600, 2, feb, 900, 3, jan, 678'''

txt = txt.split(',')
df = pd.DataFrame([*zip(txt[3::3], txt[4::3], txt[5::3])], columns=[*txt[0:3]])

print(df)

Распечатки:

  header_1  header_2  header_3
0        1       jan       600
1        2       feb       900
2        3       jan       678
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...