python - 熊猫。删除单元格并将其他人排成一行的好方法?
问题描述
在数据框中,我需要删除一些单元格并将其他单元格移到行中:
df=pd.DataFrame({'X0':['anytext','anytext','anytext','anytext','anytext'],
'X1':['12:40','boss','engen','15:44','16:01'],
'X2':['anytext','12:44','14:06','anytext','anytext'],
'X3':['anytext','anytext','anytext','anytext','anytext']})
df
X0 X1 X2 X3
0 anytext 12:40 anytext anytext
1 anytext boss 12:44 anytext
2 anytext engen 14:06 anytext
3 anytext 15:44 anytext anytext
4 anytext 16:01 anytext anytext
我想删除“boss”和“engen”并将其他单元格向左移动:
X0 X1 X2 X3
0 anytext 12:40 anytext anytext
1 anytext 12:44 anytext NaN
2 anytext 14:06 anytext NaN
3 anytext 15:44 anytext anytext
4 anytext 16:01 anytext anytext
解决方案
您需要选择行进行移位,例如,这里测试了前 2 个值X1
是否为数字 bystr[:2]
和Series.str.isnumeric
,反转掩码 by ~
,因此仅用于非数字值使用DataFrame.shift
:
m = ~df['X1'].str[:2].str.isnumeric()
面具的另一个想法,谢谢@Manakin 是测试格式的日期时间HH:MM
:
m = pd.to_datetime(df['X1'],format='%H:%M',errors='coerce').isna()
:
此外,如果想用长度测试数字 2 数字2
:
m = ~df['X1'].str.contains('^\d{2}:\d{2}$')
df[m] = df[m].shift(-1, axis=1)
print(df)
X1 X2 X3
0 12:40 anytext anytext
1 12:44 anytext NaN
2 14:06 anytext NaN
3 15:44 anytext anytext
4 16:01 anytext anytext
如果需要在X1
一个想法之后修改所有列:
df=pd.DataFrame({'X0':['anytext','anytext','anytext','anytext','anytext'],
'X1':['12:40','boss','engen','15:44','16:01'],
'X2':['anytext','12:44','14:06','anytext','anytext'],
'X3':['anytext','anytext','anytext','anytext','anytext']})
m = ~df['X1'].str.contains('^\d{2}:\d{2}$')
df.loc[m, 'X1':] =df.loc[m, 'X1':].shift(-1, axis=1)
print(df)
X0 X1 X2 X3
0 anytext 12:40 anytext anytext
1 anytext 12:44 anytext NaN
2 anytext 14:06 anytext NaN
3 anytext 15:44 anytext anytext
4 anytext 16:01 anytext anytext
另一个转换X0
为索引:
df = df.set_index('X0')
m = ~df['X1'].str.contains('^\d{2}:\d{2}$')
df[m] = df[m].shift(-1, axis=1)
df = df.reset_index()
print(df)
X0 X1 X2 X3
0 anytext 12:40 anytext anytext
1 anytext 12:44 anytext NaN
2 anytext 14:06 anytext NaN
3 anytext 15:44 anytext anytext
4 anytext 16:01 anytext anytext
推荐阅读
- javascript - 访问 WebView 中的 DOM 元素
- c - 如何在不重新创建窗口的情况下更改窗口的 X 和 Y 坐标
- git - 如何修复 git pull 失败“致命:索引包失败”
- docker - 远程和智能上的 Docker
- c++ - 与 clang 链接时 MinGW ld 的警告
- flutter - 如何在颤动中单击清除按钮时清除整个表单
- mysql - 如何在给定开始和结束日期(MYSQL)的情况下获取一周内发生的活动事件数?
- r - Problem with R error when using dplyr::distinct(): "no applicable method for 'distinct_' applied to an object of class "c('double', 'numeric')""
- vue.js - 如何重用 S3 镜像?
- java - 如何在 Hybris 中为用户组创建导航节点限制?