如何通过定界符分割列,同时注意要分离的项目的相对位置

问题描述 投票:2回答:3

下面是我的使用熊猫编写的通用数据框架Python脚本。我希望在数据框中拆分一个特定的列,以创建新列,同时尊重原始列中项目的原始方向。

请参阅以下内容,以使我清晰。预先谢谢!

我的脚本:

import pandas as pd
import numpy as np

df = pd.DataFrame({'col1': ['x,y,z', 'a,b', 'c']})
print(df)

这是我想要的

df = pd.DataFrame({'col1': ['x',np.nan,np.nan],
                    'col2': ['y','a',np.nan],
                    'col3': ['z','b','c']})
print(df)

这是我得到的

df = pd.DataFrame({'col1': ['x','a','c'],
                    'col2': ['y','b',np.nan],
                    'col3': ['z',np.nan,np.nan]})
print(df)
python pandas split position
3个回答
2
投票

您可以在justifythis答案中使用Series.str.split功能:

dfn = pd.DataFrame(
    justify(df['col1'].str.split(',', expand=True).to_numpy(), 
            invalid_val=None, 
            axis=1, 
            side='right')
).add_prefix('col')

   col0  col1 col2
0     x     y    z
1  None     a    b
2  None  None    c

1
投票

这是一种调整拆分的方法:

max_delim = df['col1'].str.count(',').max() #count the max occurance of `,`
delim_to_add = max_delim - df['col1'].str.count(',') #get difference of count from max
# multiply the delimiter and add it to series, followed by split
df[['col1','col2','col3']] = (df['col1'].radd([','*i for i in delim_to_add])
                              .str.split(',',expand=True).replace('',np.nan))
print(df)

  col1 col2 col3
0    x    y    z
1  NaN    a    b
2  NaN  NaN    c

1
投票

尝试类似的东西>>

s=df.col1.str.count(',')
#(s.max()-s).map(lambda x : x*',')
#0      
#1     ,
#2    ,,
Name: col1, dtype: object
(s.max()-s).map(lambda x : x*',').add(df.col1).str.split(',',expand=True)
   0  1  2
0  x  y  z
1     a  b
2        c
© www.soinside.com 2019 - 2024. All rights reserved.