熊猫 - 将列表转换为字符串&一列宽到长

时间:2015-09-29 18:53:24

标签: python python-2.7 pandas

我的数据框df如下所示,ID列是一个列表。

Name     Title     ID
ED       HHH     [11111, 11112, 11113, 11114]
AD       BBB     [11119, 11133]

我想首先将列ID转换为字符串,因为我假设这是我希望列继续下一步的方式。下一步是数据框df与数据透视表基本相反,如下所示。

我希望我的数据框df看起来像这样

   Name     Title     ID
    ED       HHH     11111
    ED       HHH     11112
    ED       HHH     11113
    ED       HHH     11114
    AD       BBB     11119
    AD       BBB     11133

我已经尝试了

df['ID'] = df['ID'].str.split(', ')
df['ID'] = df['ID'].str.join(map(str,df['ID']))
df['ID'] = str(df['ID']).strip(', ')
df['ID'] = ''.join(str(x) for x in df['ID'])

它并没有给我我想要的东西,或者它耗尽了太多的RAM并锁定了我的电脑。

任何帮助或提示?我是否必须首先将列表转换为字符串以将其放入我想要的输出中?

1 个答案:

答案 0 :(得分:3)

尝试按照此回答pandas: How do I split text in a column into multiple rows?

在您的情况下,会有一点点修改,如下所示:

import numpy as np
import pandas as pd
from pandas import Series, DataFrame

# since you have a column of lists skip any type of string munging
# instead, go straight to converting the lists to a Series
s = df['ID'].apply(Series,1).stack()
s.index = s.index.droplevel(-1)
s.name = 'ID'
del df['ID']
df = df.join(s)

请注意,此示例完全忽略了DataFrame的索引;您可能需要更新或reset_index()