Отдельные столбцы в .txt-файле в Pandas

#python #pandas

#python #pandas

Вопрос:

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

 e1 47 3 Self-emp-inc Married-civ-spouse Transport-moving White Male Cuba                                                                                                                                                                                  
e2 52 16 Self-emp-not-inc Married-civ-spouse Prof-specialty White Male United-States                                                                                                                                                                      
e3 26 9 Private Divorced Craft-repair White Male United-States                                                                                                                                                                                            
e4 60 9 Private Married-civ-spouse Craft-repair White Male United-States 
 

Я пробовал

 adult = pd.read_csv("Adult/dataset_full.txt", header=None)
 

Это дает только ОДИН столбец. Если используется sep=' ' , это дает

 <Error tokenizing data. C error: Expected 187 fields in line 3, saw 197>
 

Попробовал skiprows=, read_fwf() , read_table() дает все аналогичный результат.

Есть ли у кого-нибудь идеи о том, как разделить этот файл на столбцы?

Комментарии:

1. Боюсь, вы не сможете сделать это напрямую, потому что у вас есть пробелы в качестве разделителя и такие значения, как «Белый мужчина», внутри которых есть пробел. Вам придется читать данные построчно и разбивать строки на список значений вручную

2. Также похоже, что в вашем txt-файле много пробелов после каждой строки, что может помешать инструментам чтения pandas при использовании sep=' ' . Попробуйте с sep='s '

Ответ №1:

Если ваш file.txt это:

 e1 47 3 Self-emp-inc Married-civ-spouse Transport-moving White Male Cuba
e2 52 16 Self-emp-not-inc Married-civ-spouse Prof-specialty White Male United-States
e3 26 9 Private Divorced Craft-repair White Male United-States
e4 60 9 Private Married-civ-spouse Craft-repair White Male United-States
 

Тогда у вас есть четыре строки со 9 значениями, разделенными пробелом. Таким образом, вы можете:

  • прочитайте файл построчно
  • разделите и разделите строку на пробел
  • передайте это в pandas DataFrame
  • (необязательно) создать headers для столбцов
  • наконец, сбросьте это в .csv файл

Например:

 import pandas as pd

with open("file.txt") as f:
    df = pd.DataFrame([line.strip().split() for line in f.readlines()])
    headers = [f"Col{i}" for i in range(1, 10)]
    df.to_csv("your_table.csv", index=False, header=headers)
 

Вывод:

введите описание изображения здесь