2017-08-24 104 views
2

我知道这个问题的一部分可能很简单,但我是初学者,并且非常感谢最简单的解决方案:我有一个excel (.xlsx文件),其中一列的单元格中有一列数字列表(数字以空格分隔,甚至每个列表的末尾都有一个空格)。因此,该列看起来像这样:从excel文件列读取列表并将其存储在python列表中

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文件(请记住文件中只有数字的其他列),将其存储在熊猫数据框中,但是需要存储上面的这一列作为列表的列表。

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文件:那么,如果我以后再打印本专栏中,我想如果转换到一个列表会列出清单列表得到类似下面的(以及系列成大熊猫据帧,它显然读取此列文字,这是不是我的愿望。

任何帮助将高度赞赏。

阿里

+0

你可以展示大熊猫目前是如何读取文件的。在这里粘贴一个片段。这可以帮助回答 –

回答

1

我建议您加载牵连列作为一个字符串,然后将其转换为使用this functionality的嵌套列表。定义一个函数,将一个字符串返回一个列表:

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]] 

另外,也可以在读取转换牵连列excel使用converters

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

这是非常有用的,在这一点上,并完全回答我的问题。非常感谢 :) – Aly

相关问题