我有单元素数组。我如何将它们更改为元素本身?
Posted
技术标签:
【中文标题】我有单元素数组。我如何将它们更改为元素本身?【英文标题】:I have single-element arrays. How do I change them into the elements themselves? 【发布时间】:2014-05-05 15:18:08 【问题描述】:使用records = pandas.read_json(path)
将 JSON 文档导入 pandas 数据帧,其中路径是 JSON 文档的预定义路径,我发现生成的数据帧“记录”的某些列的内容并不像预期的那样简单的字符串.相反,这样一列中的每个“单元格”都是一个数组,包含一个元素——感兴趣的字符串。这使得使用布尔索引选择列变得困难。例如,Ipython 中的records[records['category']=='Python Books']
输出一个空数据帧;如果“单元格”包含字符串而不是字符串数组,则输出将是非空的,包含对应于 python 书籍的行。
我可以修改 JSON 文档,以便“记录”正确读取字符串。但是有没有办法直接修改“记录”,以某种方式将单元素数组剥离到元素本身?
【问题讨论】:
听起来你在做标准化? pandas.pydata.org/pandas-docs/stable/io.html#normalization(可以举个实际的例子!):) 谢谢安迪。我没有尝试对 json 本身进行规范化,但看起来我可以这样做来解决问题。我会在下一个 json 输出中尝试。 【参考方案1】:更新:经过澄清,我相信这可能会完成您想要的,同时将其限制为对数据的单次迭代:
nested_column_1 = records["column_name_1"]
nested_column_2 = records["column_name_2"]
clean_column_1 = []
clean_column_2 = []
for i in range(0, len(records.index):
clean_column_1.append(nested_column_1[i][0])
clean_column_2.append(nested_column_2[i][0])
然后您将 clean_column 列表转换为您在评论中提到的系列。显然,您可以根据需要创建尽可能多的 nested_column 和 clean_column 列表,并在循环中更新它们。
您可以通过记录“问题”列并使用它来创建数据结构来管理嵌套/干净列表,而不是像我在示例中那样显式声明它们,从而很容易地概括这一点。但我认为这可能会更清楚地说明这种方法。
显然,这假设所有列都具有相同数量的元素,在您的情况下这可能不是一个有效的断言。
原答案:
对不起,如果我过于简单化或误解了问题,但你能做这样的事情吗?
simplified_list = [element[0] for element in my_array_of_arrays]
或者,如果您一次不需要整个东西,只需要一个生成器:
simplifying_generator = (element[0] for element in my_array_of_arrays)
【讨论】:
好的,谢谢。我能够做到cat2 = [element[0] for element in records['cat']]
records['cat2'] = Series(cat2, index=records.index)
然后我可以删除原来的“cat”列,将 cat2 重命名为 cat,这样就好了。但是,我继续想知道是否有更快的方法来执行此操作,如果我有多个列存在此类问题并且我不希望遍历所有这些列。
啊,我想我明白了。您可以通过切出具有嵌套数组的所有列进行单次迭代,然后只迭代一次,更新每个循环中的所有列。我将在我的回答中举例说明我的建议。
感谢您的帮助 Nacho。以上是关于我有单元素数组。我如何将它们更改为元素本身?的主要内容,如果未能解决你的问题,请参考以下文章