当从csv加载pandas数据帧时,将数据框单元格内的列表爆炸成行的代码失败。

时间:2018-04-27 03:34:00

标签: python pandas csv dataframe

我一直试图将数据框内的列表分解为扩展/爆炸列,如堆栈溢出How to explode a list inside a Dataframe cell into separate rows

中所述

我遇到了麻烦。

我从示例中获得了stackoverflow代码。但我无法让它用于我的个人数据文件(在我使用`pd.read_csv的csv文件中。

然后我简化了代码以摆脱一个不必要的列。我得到了简化的示例代码。然后我再次尝试加载我的.csv。再一次,它失败了。

因此,我通过将简化示例中的数据框写入新的csv文件,使用pd.read_csv`加载该文件,并重新运行简化的“爆炸”代码,将我的文件从等式中取出。我得到了同样的错误。代码和错误输出如下。

dplyr::spread

1 个答案:

答案 0 :(得分:0)

当您保存到csv文件然后从csv文件中读取时,您的初始索引将重置为默认索引。要解决此问题,您需要在index_col设置为opponent的情况下阅读csv。

而不是:

#Load DF to CSV
df = pd.read_csv("Baskets.csv")

尝试使用:

#Load DF to CSV
df = pd.read_csv("Baskets.csv", index_col='opponent')

要将nearest_neighbors列转换为列表,您还需要执行此操作:

from ast import literal_eval

df.nearest_neighbors=df.nearest_neighbors.apply(literal_eval)

在那之后,我能够融化工作:

(pd.melt(df.nearest_neighbors.apply(pd.Series).reset_index(), 
     id_vars=[ 'opponent'],
     value_name='nearest_neighbors')
 .set_index([ 'opponent'])
 .drop('variable', axis=1)
 .dropna()
 .sort_index()
)

输出:

             nearest_neighbors
opponent                  
76ers          Zach LaVine
76ers           Jeremy Lin
76ers        Nate Robinson
76ers                Isaia
blazers        Zach LaVine
blazers         Jeremy Lin
blazers      Nate Robinson
blazers              Isaia
bobcats        Zach LaVine
bobcats         Jeremy Lin
bobcats      Nate Robinson
bobcats              Isaia