python 多维不规则列表转化为1维列表

一、问题的提出

用python做数据处理的时候,出现很多不规则的列表,无法直接做数据分析,希望转化为1维列表。在网上找了多种方法,无果,后在知。乎。上找到解决方案,特此总结。

x1=[[1],[2]]
x2=[[4],[5],[6]]
x3=[[7],[8],[9],[10]]
x=[x1,[x2],[x3]]
print(x)

[[[1], [2]], [[[4], [5], [6]]], [[[7], [8], [9], [10]]]]

如上述代码段所示:x为多维列表,且维度不统一。

二、解决方法

1.错误的解决方案:

(1)flatten()函数。

因为列表x中x1,x2,x3的维度不一致,flatten()函数结果会报出警告,且结果不理想。

(2)from compiler.ast import flatten

python3已经没有compiler包了,结果会报错。

2.正确解决方案:

def flatten(a):
    for each in a:
        if not isinstance(each, list):
            yield each
        else:
            yield from flatten(each)

if __name__ == "__main__":
    x=x
    y=list(flatten(x))#此步骤为降维的最后一步
    y=np.reshape(y,(201392,20))#重新组织数据结构,201392,20表示数据的行数和列数
    y=pd.DataFrame(np.array(y),columns=['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20'])#数据转化为数据框,且命名列标题
    
    print(y.head(10))#数据量过大,只打印前10行数据预览

三、参考文献

如何将多维list降到一维,使用环境为python3? - 知乎需要降维的列表大概是这样的,希望能够实现成【562,678,723,.....】,用flatten()的话只能降一级,网上查…https://www.zhihu.com/question/63739026本人只学习了数据格式的降维,还有文本格式、字符串格式供大家参考。

你可能感兴趣的:(python,开发语言,数据分析)