如何 select 仅将具有序列名称的列添加到列表中
How to select only columns with sequence names to a list
我有一个 pandas 数据框,其中包含 [ProDT, ID,..., D1, D2, D3...D7...] 列。我想提取 D1~D15 的列名列表。
我应用了代码:
df_D = [col for col in df.columns if 'D' in col]
但是,所有包含字符 'D' 的列都被选中。
D* 列的数量可能会改变,因此使用 range(1,7) 可能不是一个好的解决方案。
非常感谢。
您可以使用 DataFrame.filter
来 select 所有匹配以下模式的列:
df.filter(regex=r'^D\d+')
详情
^D\d+
^
断言行首的位置
D
按字面匹配字符 D(区分大小写)
\d+
匹配一个数字(等于[0-9])
- + 量词 — 匹配一次和无限次,尽可能多次,根据需要回馈
您可以调用每一列:
df[['D1', 'D2', ..., 'D15']]
或使用过滤器:
df.filter(like='D')
希望对您有所帮助
startswith
的旧列表理解:
df[[i for i in df.columns if i.startswith('D')]]
或者:
df.loc[:,df.columns.str.startswith('D')] #thanks @WeNYoBen
df = df[['D'+str(i) for i in range(1, 16)]]
我有一个 pandas 数据框,其中包含 [ProDT, ID,..., D1, D2, D3...D7...] 列。我想提取 D1~D15 的列名列表。
我应用了代码:
df_D = [col for col in df.columns if 'D' in col]
但是,所有包含字符 'D' 的列都被选中。 D* 列的数量可能会改变,因此使用 range(1,7) 可能不是一个好的解决方案。
非常感谢。
您可以使用 DataFrame.filter
来 select 所有匹配以下模式的列:
df.filter(regex=r'^D\d+')
详情
^D\d+
^
断言行首的位置D
按字面匹配字符 D(区分大小写)\d+
匹配一个数字(等于[0-9])- + 量词 — 匹配一次和无限次,尽可能多次,根据需要回馈
您可以调用每一列:
df[['D1', 'D2', ..., 'D15']]
或使用过滤器:
df.filter(like='D')
希望对您有所帮助
startswith
的旧列表理解:
df[[i for i in df.columns if i.startswith('D')]]
或者:
df.loc[:,df.columns.str.startswith('D')] #thanks @WeNYoBen
df = df[['D'+str(i) for i in range(1, 16)]]