【问题标题】:Dictionary not handling multiple values字典不处理多个值
【发布时间】: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_tablepandas.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


【解决方案1】:

注意:

city_st = dict(zip(state,city))

由于多值,此操作可能会导致您的结果数量减少。

你可以使用

aa = pd.dataframe({'state': state,'city': city})
aa['State' ] = range(aa.shape[0])

然后使用 pivot_table 来融合您的数据

【讨论】:

  • 谢谢。使用此“ValueError:数组必须都是相同长度”进行回溯
  • @Emm:statecity的元素个数必须相同。您是否正在尝试将州名与城市名相匹配?
  • @Julia Hmmm...当我在运行正则表达式后检查州的长度时,州的长度是 50...大约有 517 个城市...所以在初始表中,城市列在州名下
猜你喜欢
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2021-11-03
  • 1970-01-01
  • 2021-12-24
  • 2014-04-15
  • 2015-02-05
相关资源
最近更新 更多