熊猫字符串拆分列丢失

时间:2020-01-10 23:50:42

标签: python pandas dataframe

我正在尝试在熊猫数据框(定界符',')中拆分一列,如下所示:

Index ID    Note 
0     0     NT,1.7,1.3,NT,1.3,NT,NT,1.3,1.3
1     1     NT,2.3,2.3,NT,NT,belegt,NT,m.E.,belegt,m.E.,1....
2     2     NT,1.3,1.3,1.3,1.3,NT,1.3,NT,1.3,NT,1.3,1.3,1....
3     3     NT,PR,NT,NT,PR,PR,NT,o.E.,PR,NT
4     4     belegt,NT,m.E.,NT,NT,NT,2.3,m.E.,2.3,1.7,beleg...
5     5     2.3,NT,1.7,m.E.,m.E.,1.3,m.E.,m.E.,1.7,m.E.,2....
6     6     NT,m.E.
7     7     m.E.,NT,NT,NT,NT,NT,NT,NT,m.E.,NT,NT,2.3

我通过

实现了这一目标
split = new['Note'].str.split(',', expand=True)

并获得结果


0   1   2   3   4   5   6   7   8   9   ... 226 227 228 229 230 231 232 233 234 235
0   NT  1.7 1.3 NT  1.3 NT  NT  1.3 1.3 None    ... None    None    None    None    None    None    None    None    None    None
1   NT  2.3 2.3 NT  NT  belegt  NT  m.E.    belegt  m.E.    ... None    None    None    None    None    None    None    None    None    None
2   NT  1.3 1.3 1.3 1.3 NT  1.3 NT  1.3 NT

问题是,此后“ ID”列丢失。我尝试使用

    split['Note'] = new['Note'].str.split(',', expand=True)

,但是只有','之前的第一个字符串/数字在新列中,而其他所有内容都不是这样的:


ID  Note
0   0   NT
1   1   NT
2   2   NT
3   3   NT
4   4   belegt
5   5   2.3
6   6   NT
7   7   m.E.
8   8   belegt
9   9   belegt

非常感谢您的帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

pandas.concatpandas.DataFrame.pop一起使用:

df2 = df.pop("Note").str.split(",", expand=True)
df = pd.concat([df, df2], 1)
print(df)

输出:

   Index  ID       0     1     2     3     4       5     6     7       8  \
0      0   0      NT   1.7   1.3    NT   1.3      NT    NT   1.3     1.3   
1      1   1      NT   2.3   2.3    NT    NT  belegt    NT  m.E.  belegt   
2      2   2      NT   1.3   1.3   1.3   1.3      NT   1.3    NT     1.3   
3      3   3      NT    PR    NT    NT    PR      PR    NT  o.E.      PR   
4      4   4  belegt    NT  m.E.    NT    NT      NT   2.3  m.E.     2.3   
5      5   5     2.3    NT   1.7  m.E.  m.E.     1.3  m.E.  m.E.     1.7   
6      6   6      NT  m.E.  None  None  None    None  None  None    None   
7      7   7    m.E.    NT    NT    NT    NT      NT    NT    NT    m.E.   

      9     10    11    12  
0  None   None  None  None  
1  m.E.      1  None  None  
2    NT    1.3   1.3     1  
3    NT   None  None  None  
4   1.7  beleg  None  None  
5  m.E.      2  None  None  
6  None   None  None  None  
7    NT     NT   2.3  None  

答案 1 :(得分:1)

如果除了要拆分的列之外仅还有一列,只需将其设置为split之后的index和reset_index

df_split = df_new.set_index('ID')['Note'].str.split(',', expand=True).reset_index()

Out[1316]:
   ID       0     1     2     3     4       5     6     7       8     9  \
0   0      NT   1.7   1.3    NT   1.3      NT    NT   1.3     1.3  None
1   1      NT   2.3   2.3    NT    NT  belegt    NT  m.E.  belegt  m.E.
2   2      NT   1.3   1.3   1.3   1.3      NT   1.3    NT     1.3    NT
3   3      NT    PR    NT    NT    PR      PR    NT  o.E.      PR    NT
4   4  belegt    NT  m.E.    NT    NT      NT   2.3  m.E.     2.3   1.7
5   5     2.3    NT   1.7  m.E.  m.E.     1.3  m.E.  m.E.     1.7  m.E.
6   6      NT  m.E.  None  None  None    None  None  None    None  None
7   7    m.E.    NT    NT    NT    NT      NT    NT    NT    m.E.    NT

      10    11    12
0   None  None  None
1      1  None  None
2    1.3   1.3     1
3   None  None  None
4  beleg  None  None
5      2  None  None
6   None  None  None
7     NT   2.3  None