从 Pandas 中的列表匹配列时保留个案
Preserving Cases while Column Matching from List in Pandas
我有一个数据框,其中的字符串具有不同大小写的列名以及小写字符串列表。
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']
我想 select 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
您可以使用str.lower()
将列名转换为小写,然后用isin
方法构造一个逻辑序列到select列;列名称不会以这种方式更改:
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")
我有一个数据框,其中的字符串具有不同大小写的列名以及小写字符串列表。
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']
我想 select 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
您可以使用str.lower()
将列名转换为小写,然后用isin
方法构造一个逻辑序列到select列;列名称不会以这种方式更改:
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")