将文本文件转换为数据框,但文本文件结构很乱!(在Python中)

问题描述 投票:0回答:1

所以,我有一个文本文件,我试了一下 read_csv 但文件结构不允许 read_csv 以获得所需的输出。有人建议我使用 open() 而不是函数,但还不能成功应用!

文本文件.Textfile是来自维基百科的这种结构。Textfile是来自wikipedia的这个结构。

现在,我想要一个有两列State和RegionName的数据框,但由于它们是垂直排列的,我无法得到所需的输出。

我的输出。只有一列被填满,其余都是NaN。

所需的输出是这样的。

{('Alabama','Auburn'),('Alabama','Florence'),('Alabama','Jacksonville') so on}
python pandas text-files
1个回答
3
投票

假设你所有的数据结构都和所提供的照片一样,这应该是可行的。

import pandas as pd


df = pd.DataFrame(columns=["State", "RegionName"])

with open("example.txt") as f:
    content = f.read()
    lines = content.splitlines()
    state_split_str = "[edit]"
    region_split_str = "("
    for line in lines:
        if state_split_str in line:
            state = line.split(state_split_str)[0].strip()
        else:
            region = line.split(region_split_str)[0].strip()
            df = df.append({"State": state, "RegionName": region}, ignore_index=True)

print(df)

上面的结果是:

     State    RegionName
0  Alabama        Auburn
1  Alabama      Florence
2  Alabama  Jacksonville
3   Alaska     Fairbanks

这样做的原因是,我们知道一个州的所有学校前面都有一行包含州名的字样,旁边还有"[编辑]"。 我们只需检查字符串中是否存在"[edit]"。 如果存在,我们就在"[edit]"上进行分割,并通过以下方式取左边的所有内容(州名)。[0]. 为了达到好的效果,我们将新的字符串中的任何前导空格和后导空格剪掉。 这就提供了我们的状态。 当我们继续迭代每一行时,我们知道如果一行不包含"[edit]",那么它就是属于我们 "state "变量当前值的学校。

然后,我们只需对每个字符串的开头括号进行类似的拆分,再取拆分返回的列表中的第一项来获取RegionName,再次修剪空格。 既然我们现在已经有了State和RegionName的值,我们就可以将它们追加到我们的数据框架中。

这是一个理想的解决方案吗?不完全是,因为我们要把值硬编码到我们的代码中,以拆分oncolumn名称进行追加,但由于你的数据格式,我不确定是否有更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.