如何解决Pandas DataFrame中意外出现元组类型列名的问题
问题描述
执行代码时,Pandas生成的DataFrame出现元组类型的列名。原本计划对除class和path之外的所有列做归一化,先通过pop()移除这两列,归一化完成后重新添加回去,但最终列名却被存储为元组。
代码如下:
class_ = dataset.pop("class") path_ = dataset.pop("path") layer = tf.keras.layers.LayerNormalization(axis=0) g = layer(dataset) gh = pd.DataFrame(np.array(g),columns=[dataset.columns.values]) gho = gh.sort_index(axis=1) gho["path"] = list(path_) gho["class"] = list(class_)
期望执行print(gho.columns.values)时输出:
['path' 'class' 'velocity']
实际得到的结果:
[('path',) ('class',) ('velocity',)]
解决办法
问题根源在创建DataFrame的列参数上:columns=[dataset.columns.values]多套了一层列表,导致原本是一维数组的dataset.columns.values被包装成二维结构,Pandas会将每个元素识别为元组。
只需去掉外层方括号,直接传入dataset.columns.values作为columns参数即可:
gh = pd.DataFrame(np.array(g), columns=dataset.columns.values)
也可以直接使用dataset.columns替代dataset.columns.values,效果一致:
gh = pd.DataFrame(np.array(g), columns=dataset.columns)
修改后生成的列名会是普通字符串类型,后续添加path和class列后,列名格式就能符合预期。
内容的提问来源于stack exchange,提问作者Alex_MaknCheese
相关产品推荐
相关产品推荐

