Как преобразовать текстовый файл в формат данных, используя pandas и python - PullRequest
0 голосов
/ 02 марта 2020

имеют текстовый файл с такими значениями. как преобразовать его в dataframe. попробовал несколько способов удалить пробелы и упорядочить их в кадре данных. Все данные могут быть сохранены в формате str, включая дату

cn No:    9991
PUEN:    S55D
Date :    05/01/2017
Development Name:   
Status: Active
Development Location:   
Address: 3 ADAM PARK #3-3 
Contact No.: 
Name Agent: 
Managing  No.: 5648123
cn No:    4671
PUEN:    T11F
Date :    16/07/2019
Development Name:   MEGA
Status: Active
Development Location:   
Address: 39 WOODLANDS CLOSE,  #01-64, 
Contact No.: 6258 6944
Name  Agent: 
Managing  No.:
cn No:    9991
PUEN:    S55D
Date :    05/01/2017
Development Name:   
Status: Active
Development Location:   
Address: 3 ADAM PARK #3-3 
Contact No.: 
Name Agent: 
Managing  No.: 5648123
cn No  PUEN     Date        Development Name       Status      Development Location      Address                          Contact No.          Name Agent            Managing No
9991   S55D   05/01/2017                          Active                                3 ADAM PARK #3-3
4671   T11F   16/07/2019     MEGA                 Active                                39 WOODLANDS CLOSE,  #01-64,        6258 6                                   5648123

пробовал это:

но это работает только для двух значений

import pandas as pd

# Dictionary to store the header and values
my_dict = dict()

# Open the file
with open("./temp.txt", 'r') as file_object: 

    # Read the content
    content = file_object.readlines() 

    # For every row 
    for row in content:

    # Get the header and data
    header, data = row.split(":") 

    # Check if the header is not in dict keys
    if header not in my_dict.keys(): 

        # We add the data with corresponding key
        my_dict[header.strip()] = data.strip()


# Returns a dataframe with the values
pd.DataFrame.from_dict(my_dict, orient='index')

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Похоже, у вас есть куча записей без видимого разделения, состоящего из линий, следующих за этим шаблоном: key* : *value.

Принцип, который я бы использовал, состоит в создании списка словарей (по одной на запись ), а также сохраните набор всех ключей, чтобы иметь возможность впоследствии построить кадр данных, даже если некоторые ключи отсутствуют в некоторых записях.

В следующем коде предполагается, что повторение ключа отмечает начальную точку Новая запись.

...
# the set of all keys, even from different records
cols = set()

# the current record, empty at the beginning of file
rec = {}

# the list of all records
data = [rec]

# Open the file
with io.StringIO(t) as content:

    # read it line by line
    for line in content:

        # split in key: value and strip blanks
        header, value = (txt.strip() for txt in line.split(':', 1))

        if header not in rec:       # create a new record
            rec[header] = value
            cols.add(header)
        else:
            rec = {header: value}   # feed current record
            data.append(rec)

# time to build the dataframe
df = pd.DataFrame(data, columns = list(cols))
0 голосов
/ 02 марта 2020

Вы можете создать словарь, в котором каждый ключ является именем столбца и имеет список значений для этого столбца

import pandas as pd

data = {}
with open("test.txt") as my_file:
    for line in my_file:
        column, value = [string.strip() for string in line.split(":")]
        if column not in data:
            data[column] = [value]
        else:
            data[column].append(value)

df = pd.DataFrame(data)
print(df)

ВЫХОД

  cn No  PUEN        Date  ... Contact No. Name Agent Managing  No.
0  9991  S55D  05/01/2017  ...                              5648123
1  4671  T11F  16/07/2019  ...   6258 6944                         
2  9991  S55D  05/01/2017  ...                              5648123

[3 rows x 10 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...