根据列名创建DataFrame的子集。

9

我有一个名为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)})

抱歉,今天我有点慢!感谢任何帮助

2个回答

25

手动选择所有包含单词“Vibration”的列的类似方法:

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

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

df.filter(like="Vibration")
如果您想要一个更加灵活的筛选器,可以使用regex选项。例如,查找列名中是否包含“Vibration”或“Ecc”:
df.filter(regex='Ecc|Vibration')

1
筛选器完美地满足了我的需求。非常感谢。很抱歉我不能点赞,因为我的声望太低了。 - user2761786
能否像 df.filter(like='Ecc' or 'Vibration') 这样做?我尝试过,但它没有起作用。 - user2761786
2
添加了正则表达式选项? - joris

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

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

如何获取更多列:

如何在列中搜索特定的值:

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

抱歉,我表达不够清晰。列名并不仅包含单词“Vibration”。例如,它们的格式为“Ch 2:Vibration Brg 6T”。 - user2761786
我遇到了一个错误:KeyError: "[['Vibration']] 不在 [columns] 中的 ALL 中。谢谢你的快速回复。 - user2761786
我更新了我的回答,根据我的理解这是你所需要的。请更新您原始帖子以展示您的DataFrame布局。 - Svend Feldt
已经添加到答案中了,希望这样解释得更清楚了。 - user2761786

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接