如何将熊猫数据框的列值拆分为以“,”分隔的行

时间:2018-08-20 21:26:09

标签: python pandas dataframe data-analysis

我正在尝试用熊猫数据帧的“,”分隔符分隔列值。

原始数据原始熊猫数据框

enter image description here

所需的输出所需的输出

enter image description here

我尝试了几种方法。

分解/堆叠一系列字符串

newdf['Month'] = newdf['Month'].apply(list)

使用上面的代码,我得到[j,a,n,,f,e,b],然后我已经使用

pd.Dataframe({'Month':np.concatenate(newdf['Month'].values), 'cust.no':newdf['cust.no'].repeat(newdf['cust no.'].apply(len))})

输出是每个字母都在单独的行中。结果,行号与“客户编号”不匹配。而且我遇到了错误。

我知道有几种可用的功能,但是我无法有效地分解这些值。

2 个答案:

答案 0 :(得分:0)

您总是可以使用正则表达式(正则表达式)来标识逗号前的所有文本。

假设原始数据帧称为data,也就是说您的月份列为data['Months'],则可以使用正则表达式r'(.+?),'选择逗号前的所有内容。

data['Months'] = data['Months'].str.extract(r'(.+?),', expand=True)

您随时可以在https://pythex.org/上测试正则表达式。尝试在测试字符串框中输入“月份”列,并将(.+?),作为正则表达式。

答案 1 :(得分:0)

Setup

df = pd.DataFrame({'id': [1,2,3,4], 'month': ['Jan,Fev', 'Feb,July', 'Jun,Aug', 'July,Mar']})

    id  month
0   1   Jan,Fev
1   2   Feb,July
2   3   Jun,Aug
3   4   July,Mar

str.split + pd.DataFrame() + stack

df = df.set_index('id')
pd.DataFrame(df.month.str.split(',').to_dict()).T.stack().reset_index(level=0, name='month')

    level_0 month
0   1       Jan
1   1       Fev
0   2       Feb
1   2       July
0   3       Jun
1   3       Aug
0   4       July
1   4       Mar