Python熊猫两列索引和区域.该地区有州,然后是州下的城镇.我需要一个显示相应状态的新列


def get_list_of_university_towns():
with open('university_towns.txt', 'r') as f:
data = (line.rstrip() for line in f)
lines = list(line for line in data if line)
thing = [lines]     
indexx = [lines.index(line) for line in lines if '[edit]' in line]
numlist = [indexx]
wow = pd.DataFrame(thing)
tr = wow.T
tr.columns=['Region']

当我返回代码时,它会返回:

"""    Region
0   Alabama[edit]
1   Auburn (Auburn University)[1]
2   Florence (University of North Alabama)
3   Jacksonville (Jacksonville State University)[2]
4   Livingston (University of West Alabama)[2]
5   Montevallo (University of Montevallo)[2]
6   Troy (Troy University)[2]
7   Tuscaloosa (University of Alabama, Stillman Co...
8   Tuskegee (Tuskegee University)[5]
9   Alaska[edit]
10  Fairbanks (University of Alaska Fairbanks)[2]
11  Arizona[edit]
12  Flagstaff (Northern Arizona University)[6]
13  Tempe (Arizona State University)
14  Tucson (University of Arizona)
15  Arkansas[edit]
16  Arkadelphia (Henderson State University, Ouach...

如何获取它,以便创建一个名为state的新列,该列将state名称与相应的状态索引相加?索引部分的作用是将相应的索引返回到所有状态。我基本上想让它回来:

Region    State
1   Auburn    Alabama
2   Florence  Alabama    etc..

您应该能够对行进行迭代,并使用if-else来确定行是状态还是区域。这些状态中似乎都有[edit]标记,所以任何带有该标记的行都必须是一个状态,否则就是一个区域。

为了创建数据帧本身,我们可以创建一个元组列表,第一个元素是状态,第二个元素是区域(在适当地清理文本之后(。然后将列表传递给panda,panda将优雅地将其转换为数据帧。

一个潜在的解决方案(尽管我不确定你的文本文件到底是什么样子(:

data = []
for line in lines:
if '[edit]' in line:
state = line.replace('[edit]', '')
else:
region = line.split(' (')[0]
data.append((state, region))
df = pd.DataFrame(data, columns=['state', 'region'])

最新更新