根据列名创建 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:如何根据列的值聚合行的子集