我有一个数据框,其中的字符串具有不同的列名称大小写以及小写字符串列表。
a = [5, 5, 4, 6]
b = [4, 4, 4, 4]
c = [6, 8, 2, 3]
d = [8, 6, 4, 3]
df = pd.DataFrame({'a': a,
'B_B': b,
'CC_Cc': c,
'Dd_DdDd': d})
cols = ['b_b', 'cc_cc', 'dd_dddd']
我想在df中选择与cols中的字符串匹配的列,同时保留df中列的大小写。我已经能够将列名全部小写来匹配列名,但我不确定如何保存数据帧列的原始情况。
在这种情况下,我想创建一个新的数据框,其中只有来自keep cols的df中的列,但是它们的原始情况。我该怎么做呢?
期望的输出:
B_B CC_Cc Dd_DdDd
0 4 6 8
1 4 8 6
2 4 2 4
3 4 3 3
答案 0 :(得分:2)
您可以使用str.lower()
将列名转换为小写,然后使用isin
方法构建逻辑系列以选择列;列名不会以这种方式改变:
df.loc[:, df.columns.str.lower().isin(cols)]
另一种方法是使用filter
函数,在正则表达式中指定一个修饰符(?i)
来忽略大小写:
df.filter(regex="(?i)" + "|".join(cols))
请注意,此正则表达式方法还匹配包含cols
列表中的模式的列名称,如果您想要完全匹配忽略大小写,则可以在以下位置添加单词边界:
df.filter(regex="(?i)\\b"+"\\b|\\b".join(cols)+"\\b")