从excel文件列中读取列表并将其存储在python列表中

我知道这个问题的一部分可能很简单,但我是一个初学者,并会真正感谢最简单的解决scheme:我有一个Excel(.xlsx文件)其中一列的单元格中有一个列表的列表数字(空格分隔的数字,每个列表的末尾都有空格)。 所以,这个列看起来像这样:

ColumnHeader [[[9 9 9 9 9 13 ][11 11 11 11 11 11 ][11 11 11 11 11 11 ][9 9 9 9 9 9 ] [[[9 9 9 9 9 9 ][9 9 9 9 9 9 ]]] [[[9 9 9 9 ][14 14 14 14 ][13 13 13 13 ]]] 

请注意每个列表如何具有不同数量的列表。 另外请注意,每个列表的列表在它之前和之后都有一个额外的[和]。

我想要做的是理想的读取python中的整个xlsx文件(记住文件中还有其他列只有数字),将其存储在一个pandas数据框中,但是将上面的列存储为列表名单。 所以,如果我后来打印这个专栏,我会得到像下面这样的东西(如果转换成一个列表,那么这个系列将是一个列表清单:

 ColumnHeader [[9,9,9,9,9,13],[11,11,11,11,11,11],[11,11,11,11,11,11],[9,9,9,9,9,9]] [[9,9,9,9,9,9],[9,9,9,9,9,9]] [[9,9,9,9],[14,14,14,14],[13,13,13,13]] 

如果我直接将xlsx文件读入pandas数据框,它显然会将这一列作为文本读取,这不是我所期望的。

任何帮助,将不胜感激。

阿里

我build议你加载列为string,然后使用这个function将其转换为嵌套列表。 定义一个接受一个string并返回一个列表的函数:

 import pandas as pd import ast # Load some test data df = pd.DataFrame({'fake_list' : ['[[[9 9 9 9 9 13 ][11 11 11 11 11 11 ][11 11 11 11 11 11 ][9 9 9 9 9 9 ]]]', '[[[9 9 9 9 9 9 ][9 9 9 9 9 9 ]]] ', '[[[9 9 9 9 ][14 14 14 14 ][13 13 13 13 ]]]'], 'a': [1,2,3], 'b': [4,5,6]}) def fix_list(s): s1 = s.strip() #strip white space at the edge of the string s1 = s1[1:-1] # remove edge parenthesis s1 = s1.replace(' ',',').replace('][', '],[') # make some replacements so that it looks like a nested list return ast.literal_eval(s1) # transform string to a nested list 

然后将函数应用到需要转换的列:

 df['true_list'] = df['fake_list'].apply(fix_list) print df.true_list[0] # [[9, 9, 9, 9, 9, 13], [11, 11, 11, 11, 11, 11], [11, 11, 11, 11, 11, 11], [9, 9, 9, 9, 9, 9]] 

或者,您可以使用converters从Excel中读取转换列入的列:

  df = pd.read_excel('file.xlsx', converters = {'fake_list':fix_list()}