我知道这个问题的部分内容可能很简单,但我在这方面是个初学者,如果能提供最简单的解决方案,我将非常感激。我有一个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数据框架中,显然它把这一列读成了文本,这不是我想要的。
如果能得到任何帮助,我将非常感激。
Aly
我建议你把入罪的列作为一个字符串加载,然后你把它转换为一个嵌套的列表,使用的是 该功能. 定义一个函数,接受一个字符串并返回一个列表。
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()}
你可以不用熊猫,只需使用内置的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.python-read-csv-into-a-list-of-list-or-tuples-or-dictionary-import-csv-to-list。