2017-08-24 195 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

相關問題