我正在尝试用熊猫数据帧的“,”分隔符分隔列值。
原始数据原始熊猫数据框
所需的输出所需的输出
我尝试了几种方法。
分解/堆叠一系列字符串
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))})
输出是每个字母都在单独的行中。结果,行号与“客户编号”不匹配。而且我遇到了错误。
我知道有几种可用的功能,但是我无法有效地分解这些值。
答案 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