根据列名创建 DataFrame 的子集

Posted

技术标签:

【中文标题】根据列名创建 DataFrame 的子集【英文标题】:Create a subset of a DataFrame depending on column name 【发布时间】:2014-01-21 02:07:50 【问题描述】:

我有一个名为 timedata 的 pandas DataFrame,它具有不同的列名,其中一些包含“振动”一词,有些是古怪的。是否可以创建仅包含“振动”一词的列的数据框?

我尝试过使用

vib=[]
for i in timedata:
    if 'Vibration' in i:
        vib=vib.append(i)

然后根据这些列的索引创建一个 DataFrame。这似乎真的不是最有效的方法,我相信列表理解一定有一些简单的事情。

编辑

表单数据框:

df = DataFrame('Ch 1:Load': randn(10), 'Ch 2:Vibration Brg 1T ': randn(10), 'Ch 3:Eccentricity Brg 1H ': randn(10), 'Ch 4:Vibration Brg 2T ': randn(10))

对不起,我今天过得很慢!感谢您的帮助

【问题讨论】:

【参考方案1】:

像这样手动选择所有带有“振动”字样的列:

df[[col for col in df.columns if "Vibration" in col]]

你也可以用filter方法做同样的事情:

df.filter(like="Vibration")

如果你想做一个更灵活的过滤器,你可以使用regex 选项。例如。查看列名中是否包含“Vibration”或“Ecc”:

df.filter(regex='Ecc|Vibration')

【讨论】:

过滤器非常适合我的需要。非常感谢。抱歉,我不能投票,因为我的代表太低了 是否可以做类似 df.filter(like='Ecc' or 'Vibration') 的事情?我试过了,它没有用 添加了正则表达式选项?【参考方案2】:
 newDf    = Df.loc[:,['Vibration']]

newDf    = Df.loc[:,['Vibration','eccentricity']]

获取更多列

在列中搜索值:

newDf    =  Df[Df["CollumnName"] == "vibration"]    

【讨论】:

对不起,我没有说清楚,列名不只是包含“振动”这个词。例如它们的形式为“Ch 2: Vibration Brg 6T” 我收到错误 KeyError:“[['Vibration']] are not in ALL in the [columns]”。感谢您的快速回复 更新了我的答案,我认为你需要的。请更新您的原始帖子以显示您的 DataFrame 布局。 已添加到答案中,希望这能更好地解释它

以上是关于根据列名创建 DataFrame 的子集的主要内容,如果未能解决你的问题,请参考以下文章

pandas dataframe:如何根据列的值聚合行的子集

基于 DataFrame 列名的颜色 seaborn 箱线图

根据时间对 pandas DataFrame 进行子集化

基于变量列名的子集

Pandas 使用索引名称作为列名创建 Dataframe

从字典创建 Python DataFrame,其中键是列名,值是行