在DataFram中拆分需要的行

2024-07-04 07:40:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张桌子:

                                   Name1 Name2 Name3
0                                    ABC   FGD   NNY
1  111S  PC  1T  Trees are always yellow   NaN   NaN
2                                      P   FGD   NNY
3                                    JJJ   FGD   NNY
4  111S  PC  1T  Trees are always yellow   NaN   NaN
5                                    ABC   FGD   NNY
6                                    UIK    GJ    DE

我想得到这个:

  Name1 Name2 Name3                    Name4
0   ABC   FGD   NNY                      NaN
1  111S    PC    1T  Trees are always yellow
2     P   FGD   NNY                      NaN
3   JJJ   FGD   NNY                      NaN
4  111S    PC    1T  Trees are always yellow
5   ABC   FGD   NNY                      NaN
6   UIK    GJ    DE                      NaN

我只需要拆分一些行,其他行不应更改。 我能够确定需要拆分数据的行:

if df[colname1].isnull:
    df_index=df[df[colname1].isnull()].index
    print(df_index)

现在需要分离值​​串串的。我有这样的感觉:

if df[colname1].isnull:
df_index=df[df[colname1].isnull()].index
print(df_index)

for i in df_index:
    print(i)
    df1=df[colname][i].split('     ')

df1是一个字符串,其中包含我需要的信息,但我不知道如何将这些信息放到数据帧df的需要的索引中。 你能帮我做这个吗


Tags: dfindexnanalwaystreesareabcprint
2条回答

IIUC您有一个双空格来分隔列,在句子中有一个空格。您可以使用它来执行拆分

idx = df.loc[df.Name2.isnull()].index
df['Name4'] = np.nan
df.loc[idx] = df.loc[idx].Name1.str.split('  ',expand = True).values

    Name1   Name2   Name3   Name4
0   ABC     FGD     NNY     NaN
1   111S    PC      1T      Trees are always yellow
2   P       FGD     NNY     NaN
3   JJJ     FGD     NNY     NaN
4   111S    PC      1T      Trees are always yellow
5   ABC     FGD     NNY     NaN
6   UIK     GJ      DE      NaN

使用str.splitn

s=df.fillna('').apply('  '.join,1)
s.str.split('  ',n=3)
Out[189]: 
0                                [ABC, FGD, NNY]
1    [111S, PC, 1T, Trees are always yellow    ]
2                                  [P, FGD, NNY]
3                                [JJJ, FGD, NNY]
4    [111S, PC, 1T, Trees are always yellow    ]
5                                [ABC, FGD, NNY]
6                                  [UIK, GJ, DE]
dtype: object
pd.DataFrame(s.str.split('  ',n=3).tolist())
Out[190]: 
      0    1    2                            3
0   ABC  FGD  NNY                         None
1  111S   PC   1T  Trees are always yellow    
2     P  FGD  NNY                         None
3   JJJ  FGD  NNY                         None
4  111S   PC   1T  Trees are always yellow    
5   ABC  FGD  NNY                         None
6   UIK   GJ   DE                         None

相关问题 更多 >

    热门问题