Как преобразовать в таблицу данных только один столбец с несколькими столбцами - PullRequest
0 голосов
/ 31 марта 2019

Я собрал некоторые данные в Интернете и сохранил их в блокноте в виде текста.Теперь я хочу провести анализ этих данных, но понял, что был только один столбец.

Поскольку текстовый файл был создан в красивой таблице, я не смог разделить данные.

The text file looks like this. 
                                                 0
0  +-------------+------+--------+---------+-----...
1  |  series id  | year | period |  value  | foot...
2  +-------------+------+--------+---------+-----...
3  | CUUR0000SA0 | 2014 |  M12   | 234.812 |     ...
4  | CUUR0000SA0 | 2014 |  M11   | 236.151 |     ...

Даже таблица имеет пять столбцов, но когда я проверил форму, на самом деле был только один.Может кто-нибудь помочь, как перевести его в пять столбцов в dataframe?

1 Ответ

0 голосов
/ 31 марта 2019

Вот метод для достижения этой цели:

import pandas as pd

# Sample text file (stored as a single string)
text = '''                                                 0
0  +-------------+------+--------+---------+
1  |  series id  | year | period |  value  |
2  +-------------+------+--------+---------+
3  | CUUR0000SA0 | 2014 |  M12   | 234.812 |
4  | CUUR0000SA0 | 2014 |  M11   | 236.151 |'''

# Parse the text file
lst = text.replace('+', '').replace('-', '').replace('|', '').split('\n')
new_lst = [lst[2]] + lst[4:] # Grab the data around the empty rows

# Build the data frame
df = pd.DataFrame(new_lst) # Create data frame from list
df = df[0].str.split(expand=True) # Split data into columns
df.columns = df.iloc[0,:] # Name the columns
df = df[1:] # Remove the first row
df = df[df.columns[1:]] # Remove the first column
df = df.reset_index(drop=True)
print(df)
0       series    id year   period value
0  CUUR0000SA0  2014  M12  234.812  None
1  CUUR0000SA0  2014  M11  236.151  None

Возможно, вам придется немного подправить его для работы с вашими фактическими данными.

Возможно, вы прочтетев вашем текстовом файле, например, так:

with open('file.txt') as f:
    lines = f.readlines()

Вы можете использовать text = '\n'.join(lines), а затем продолжить выполнение остального сценария.

...