我有单元素数组。如何将它们更改为元素本身?

时间:2014-03-26 22:20:21

标签: python arrays json pandas

使用records = pandas.read_json(path)将JSON文档导入到pandas数据框中,其中path是JSON文档的预定义路径,我发现结果数据框“记录”的某些列的内容不仅仅是字符串正如所料。相反,这样一列中的每个“单元格”都是一个数组,包含一个单独的元素 - 感兴趣的字符串。这使得使用布尔索引选择列变得困难。例如,Ipython中的records[records['category']=='Python Books']输出一个空数据帧;如果“cells”包含字符串而不是字符串数组,则输出将非空,包含与python书籍对应的行。

我可以修改JSON文档,以便“记录”正确读取字符串。但有没有办法直接修改“记录”,以某种方式将单元素数组剥离到元素本身?

1 个答案:

答案 0 :(得分: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)