我的熊猫数据框如下:
>df
time w_m w_s p_m p_s
0 1 43102.490062 0.935265 0.000000 0.416194
1 2 41692.002871 0.942409 0.000000 0.416208
2 3 40592.822117 0.956229 0.000000 0.416222
3 4 40218.101405 0.956392 0.000000 0.416236
4 5 39606.057576 0.958667 0.000000 0.416250
5 6 37483.601032 0.961907 0.000000 0.416264
6 7 37678.647967 0.965330 0.000000 0.416278
7 8 38082.193349 0.965330 0.000000 0.416292
我想过滤我的数据框,以便仅在其标题名称的末尾带有'_m'
的行。
我希望通过a = df.some_method()
完成以下输出:
>a
w_m p_m
0 43102.490062 0.000000
1 41692.002871 0.000000
2 40592.822117 0.000000
3 40218.101405 0.000000
4 39606.057576 0.000000
5 37483.601032 0.000000
6 37678.647967 0.000000
7 38082.193349 0.000000
我该怎么做?
答案 0 :(得分:3)
将filter
与参数regex
和^
用作字符串的匹配开始,或将$
用作字符串的匹配结束:
print (df)
time w_m _mw_s p_m _mp_s
0 1 43102.490062 0.935265 0.0 0.416194
1 2 41692.002871 0.942409 0.0 0.416208
2 3 40592.822117 0.956229 0.0 0.416222
3 4 40218.101405 0.956392 0.0 0.416236
4 5 39606.057576 0.958667 0.0 0.416250
5 6 37483.601032 0.961907 0.0 0.416264
6 7 37678.647967 0.965330 0.0 0.416278
7 8 38082.193349 0.965330 0.0 0.416292
df1 = df.filter(regex='^_m')
print (df1)
_mw_s _mp_s
0 0.935265 0.416194
1 0.942409 0.416208
2 0.956229 0.416222
3 0.956392 0.416236
4 0.958667 0.416250
5 0.961907 0.416264
6 0.965330 0.416278
7 0.965330 0.416292
df2 = df.filter(regex='_m$')
print (df2)
w_m p_m
0 43102.490062 0.0
1 41692.002871 0.0
2 40592.822117 0.0
3 40218.101405 0.0
4 39606.057576 0.0
5 37483.601032 0.0
6 37678.647967 0.0
7 38082.193349 0.0
如果要所有值_m
使用参数like
:
df3 = df.filter(like='_m')
print (df3)
w_m _mw_s p_m _mp_s
0 43102.490062 0.935265 0.0 0.416194
1 41692.002871 0.942409 0.0 0.416208
2 40592.822117 0.956229 0.0 0.416222
3 40218.101405 0.956392 0.0 0.416236
4 39606.057576 0.958667 0.0 0.416250
5 37483.601032 0.961907 0.0 0.416264
6 37678.647967 0.965330 0.0 0.416278
7 38082.193349 0.965330 0.0 0.416292
答案 1 :(得分:1)
将iloc
与str.contains
一起使用:
a = df.iloc[:,df.columns.str.contains('_m$')]
print(a)
w_m p_m
0 43102.490062 0.0
1 41692.002871 0.0
2 40592.822117 0.0
3 40218.101405 0.0
4 39606.057576 0.0
5 37483.601032 0.0
6 37678.647967 0.0
7 38082.193349 0.0
说明:
_m
,请使用_m$
作为正则表达式_m
,请使用^_m
作为正则表达式_m
,请使用_m
作为正则表达式。答案 2 :(得分:1)
列表理解解决方案:
df_new = df[[c for c in df.columns if c.endswith('_m')]]