pd.ExcelFile:file包含浮点数列表,但列表导入为字符串

时间:2017-10-06 17:27:50

标签: python excel string list pandas

我将浮动列表导出到excel文件,我现在想再次导入为数据帧。我得到一个10x7的数据帧,看起来都很好,除了我的所有列表都存储为一个字符串(这是有道理的我猜,因为excel不知道列表是什么,对吧?)。我正在使用此代码导入文件:

pd.ExcelFile('fitness.xlsx')

使用转换器参数没有帮助。你知道是否有一种简单的方法可以直接导入我的列表作为包含浮点数的列表?我可以首先导出到不同的格式吗?如果是这样,哪一个可以处理我的数据格式?目前我的参赛作品如下:

In:
xl_var.loc[xl_var['stimulus'] == -2, 'first spike'].values
Out:
array(['[14.25, 11.649999999999864]'], dtype=object)

这是我导入的数据框的样子。您看到我的最后一列甚至包含2D列表,这使得之后的转换有点混乱。

my dataframe

这就是我要导入的excel文件的样子。

enter image description here

1 个答案:

答案 0 :(得分:0)

使用eval()可以将列表的字符串表示转换为列表。对于单个列,请使用.apply(),如下所示:

xl_var['first spike'].apply(eval)

如果您要转换所有列,可以使用.applymap()并列出要转换的列:

cols = ['first spike', 'number spikes', 'peak', 'undershoot']
xl_var[cols] = xl_var[cols].applymap(eval)

对于最后一列,您将需要使用字符串函数来删除'数组',以便eval可以像python列表一样处理它们,或者您可以从array导入numpy {1}}允许eval将其转换为numpy数组。

from numpy import array
xl_var['average spike shape'].apply(lambda x:eval(x, globals()))

示例:

import pandas as pd
from numpy import array

xl_var = pd.DataFrame.from_items((('stimulus',[-2, -1.75]), 
                                  ('first spike',['[14.25, 11.65]', '[14.15, 13.27]']), 
                                   ('arrays', ['[array([1,2]),array([3,4])]','[array([5,6]),array([7,8])]']) ))

In :
xl_var['first spike'].values
Out:
array(['[14.25, 11.65]', '[14.15, 13.27]'], dtype=object)

In :
xl_var['first spike'].apply(eval)
Out:
0    [14.25, 11.65]
1    [14.15, 13.27]
Name: first spike, dtype: object

In :
xl_var['arrays'].values
Out:
array(['[array([1,2]),array([3,4])]', '[array([5,6]),array([7,8])]'], dtype=object)

In :
xl_var['arrays'].apply(lambda x:eval(x,globals())).values
Out:
array([list([array([1, 2]), array([3, 4])]),
       list([array([5, 6]), array([7, 8])])], dtype=object)