我试图根据分隔符将一列拆分为两列。该列目前包含以"-"分隔的文本。列中的一些值是NaN,所以当我运行下面的代码时,我得到以下错误消息:ValueError: Columns必须与key长度相同。
我不想删除NaN值,但我不确定如何跳过它们,以便这种分割工作。
我现在的代码是:
df[['A','B']] = df['A'].str.split('-',expand=True)
您的代码可以很好地使用NaN值,但您必须使用n=1
作为str.split
的参数:
假设这个数据帧:
df = pd.DataFrame({'A': ['hello-world', np.nan, 'raise-an-exception']}
print(df)
# Output:
A
0 hello-world
1 NaN
2 raise-an-exception
复制错误:
df[['A', 'B']] = df['A'].str.split('-', expand=True)
print(df)
# Output:
...
ValueError: Columns must be same length as key
使用n=1
:
df[['A', 'B']] = df['A'].str.split('-', n=1, expand=True)
print(df)
# Output:
A B
0 hello world
1 NaN NaN
2 raise an-exception
另一种方法是生成更多的列:
df1 = df['A'].str.split('-', expand=True)
df1.columns = df1.columns.map(lambda x: chr(x+65))
print(df1)
# Output:
A B C
0 hello world None
1 NaN NaN NaN
2 raise an exception
可以用loc:
将它们过滤掉df.loc[df['A'].notna(), ['A','B']] = df.loc[df['A'].notna(), 'A'].str.split('-',expand=True)