所以,我有一个文本文件,我试了一下 read_csv
但文件结构不允许 read_csv
以获得所需的输出。有人建议我使用 open()
而不是函数,但还不能成功应用!
文本文件.Textfile是来自维基百科的这种结构。Textfile是来自wikipedia的这个结构。
现在,我想要一个有两列State和RegionName的数据框,但由于它们是垂直排列的,我无法得到所需的输出。
我的输出。只有一列被填满,其余都是NaN。
所需的输出是这样的。
{('Alabama','Auburn'),('Alabama','Florence'),('Alabama','Jacksonville') so on}
假设你所有的数据结构都和所提供的照片一样,这应该是可行的。
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名称进行追加,但由于你的数据格式,我不确定是否有更好的解决方案。