【发布时间】:2018-12-11 08:25:01
【问题描述】:
我正在尝试创建一个州和城市的数据框。
我正在阅读的表格中的每个州名都以字母 [edit] 结尾,另一方面,城市以 (text)[number]
我使用正则表达式删除了括号和方括号中的文本,将州保存在州列表中,将城市保存在另一个城市列表中。
然后我将这两个列表转换成字典,其中 state 为 key,city 为 value。
但是有 517 个城市,当我这样做时,我会失去 467 个城市。我猜是因为就目前而言,我不允许我的字典处理多个值。我的目标是创建一个具有州列和城市列(与其所在州匹配的城市)的 517x2 维度的数据框。如果我从这本字典创建一个数据框,我只会得到 50x2 而不是 512x2 尺寸。
我的问题是; i.) 我的推理是否正确,ii.) 我应该如何考虑解决这个问题/我应该如何解决它,iii.) 是我编写的实现最终目标的最有效方式的代码
import pandas as pd
import numpy as np
import re
state = []
city = []
with open("university_towns.txt","r") as i:
uni = i.readlines()
for st in uni:
if "[edit]"in st:
state.append(re.sub("[\\[].*?[\\]]\s", "", st))
else:
city.append(re.sub("[\(\[].*?[\)\]]\s", "", st))
city_st = dict(zip(state,city))
#need to take the key-value pairs/items from the dictionary
s = pd.Series(city_st, name ='RegionName')
s.index.name = 'State'
s = s.reset_index()
s
添加:不太清楚如何为这个问题添加相关数据
【问题讨论】:
-
我会说
table[state] -> set(cities)它可能是例如stackoverflow.com/a/47548471/705086 -
“但是有 517 个城市,当我这样做时,我失去了 467 个城市”——这是合乎逻辑的,因为字典只包含唯一键(即 50 个唯一状态)。为什么不直接使用
pandas阅读州和城市表?您可以使用pandas.read_table或pandas.read_csv之类的东西,然后格式化字符串。 -
@Julia 但这将被读入一个包含州和城市的一列的数据框中
-
@Emm:你也可以这样做(如果索引不需要是状态):
s=pd.DataFrame(); s['state'] = state; s['city'] = city。要基于状态执行操作,您可以将数据分组,例如cities_count = s.groupby('state').size()
标签: python python-3.x pandas data-analysis data-cleaning