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

Posted

技术标签:

【中文标题】从 excel 文件列中读取列表列表并将其存储在 python 列表中【英文标题】:Reading a list of lists from an excel file column and storing it in a python list 【发布时间】:2018-02-01 20:28:51 【问题描述】:

我知道这个问题的某些部分可能很简单,但我是这方面的初学者,并且非常感谢最简单的解决方案:我有一个 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 数据框,它显然会将此列读取为文本,这不是我想要的。

对此的任何帮助将不胜感激。

阿里

【问题讨论】:

你能展示一下 pandas 目前是如何读取文件的吗?在此处粘贴一个 sn-p。这可以帮助回答 【参考方案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]]

或者,您可以在使用 converters 从 excel 中读取数据时转换犯罪列:

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

【讨论】:

这一点非常有用,并且准确地回答了我的问题。非常感谢:)【参考方案2】:

不用panda也可以,只用内置的csv库

from csv import reader

# read csv file as a list of lists
with open('students.csv', 'r') as read_obj:
    # pass the file object to reader() to get the reader object
    csv_reader = reader(read_obj)
    # Pass reader object to list() to get a list of lists
    list_of_rows = list(csv_reader)
    print(list_of_rows)

如果要排除第一行,请使用 .pop 函数

list_of_rows.pop(0)

基于:https://thispointer.com/python-read-csv-into-a-list-of-lists-or-tuples-or-dictionaries-import-csv-to-list/

【讨论】:

以上是关于从 excel 文件列中读取列表列表并将其存储在 python 列表中的主要内容,如果未能解决你的问题,请参考以下文章

从文件中读取列表列表作为python中的列表列表

从列表列表中提取元素并将其分配为熊猫数据框列中的值

从excel读取图像并将其存储在sql server中

如何从 Firebase Firestore 获取数据并将其存储在列表中以在颤振小部件中使用?

从文本文件中逐行提取数据并将其存储在python的列表中[重复]

C#读取文本文件并将值存储在不同的列表中