如何仅将一个列表更改为具有多个列的数据框

时间:2019-03-31 03:00:05

标签: python pandas dataframe pretty-print

我在线上抓取了一些数据,并将它们作为文本保存在记事本中。现在,我想对这些数据进行分析,但是意识到只有一列。

由于文本文件是在漂亮的表中完成的,所以我无法拆分数据。

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 |     ...

即使表格看起来有五列,但是当我检查形状时,实际上只有一列。 谁能帮忙将其转换为数据框的五列?

1 个答案:

答案 0 :(得分:0)

这里是实现此目的的方法:

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),然后继续执行上述脚本的其余部分。