我有一个Pandas数据框列,该列中的数据如下所示:
col1
abc
ab23
2345
fgh67@
8980
我需要再创建2列第2列和第3列,如下所示:
col2 col3
abc 2345
ab23 8980
fgh67@
我使用过str.isnumeric(),但这在dataframe列中对我没有帮助。有人可以帮忙吗?
答案 0 :(得分:1)
使用str.isnumeric
或to_numeric
并检查非NaN的布尔掩码,并按boolean indexing
进行过滤:
m = df['col1'].str.isnumeric()
#alternative
#m = pd.to_numeric(df['col1'], errors='coerce').notnull()
df = pd.concat([df.loc[~m, 'col1'].reset_index(drop=True),
df.loc[m, 'col1'].reset_index(drop=True)], axis=1, keys=('col2','col3'))
print (df)
col2 col3
0 abc 2345
1 ab23 8980
2 fgh67@ NaN
如果要向新添加的列中按索引对齐的DataFrame
:
df['col2'] = df.loc[~m, 'col1']
df['col3'] = df.loc[m, 'col1']
print (df)
col1 col2 col3
0 abc abc NaN
1 ab23 ab23 NaN
2 2345 NaN 2345
3 fgh67@ fgh67@ NaN
4 8980 NaN 8980
或者不对齐:
df['col2'] = df.loc[~m, 'col1'].reset_index(drop=True)
df['col3'] = df.loc[m, 'col1'].reset_index(drop=True)
print (df)
col1 col2 col3
0 abc abc 2345
1 ab23 ab23 8980
2 2345 fgh67@ NaN
3 fgh67@ NaN NaN
4 8980 NaN NaN