【问题标题】:Extract a column based on its contents CSV python根据其内容CSV python提取列
【发布时间】:2015-01-09 12:15:22
【问题描述】:

我有一个如下所示的 csv 文件

h1,h2,h3
1 year,homo sapiens,fibrous tissue
3 minutes,homo sapiens,fibrous tissue
2 hours,homo sapiens,epithelial tissue

我正在尝试获取包含我提供的字符串的列。例如,如果我说年份,则需要将整列附加到 [1 年,3 分钟,2 小时] 之类的列表中。我完全不知道如何进行。非常感谢任何帮助。

编辑:这个问题是,数据可以在任何列中。

【问题讨论】:

    标签: python string csv pandas extract


    【解决方案1】:

    我们可以使用列表推导和anystr.contains 的组合:

    In [183]:
    # filter the columns for only those that contain our text of interest
    cols_of_interest = [col for col in df if any(df[col].str.contains('year'))]
    cols_of_interest
    Out[183]:
    ['h1']
    In [184]:
    # use the list as a column filter
    df[cols_of_interest]
    Out[184]:
              h1
    0     1 year
    1  3 minutes
    2    2 hours
    

    因此,这会通过调用矢量化的str 方法contains 来测试列中的any 值是否包含感兴趣的文本。

    将列表推导式包装到返回列表的函数中会很容易:

    In [185]:
    
    def cols_contains(text):
        return [col for col in df if any(df[col].str.contains(text))]
    
    df[cols_contains('year')]
    Out[185]:
              h1
    0     1 year
    1  3 minutes
    2    2 hours
    

    【讨论】:

    • 非常感谢。如果它在多个列中,我们是否可以指定列名?
    • 你也可以像filtered = [col for col in df if 'text' in col]一样过滤列
    【解决方案2】:

    试试这个

    f=open('your_file.csv','r')
    
    x=[]
    for i in f:
        x.append(i)
    
    
    "first column"
    
    for i in range(len(x)):
        print x[i].split(',')[0]
    

    输出 h1

    1 年

    3 分钟

    2 小时

    "Second Column"
    
    
    for i in range(len(x)):
        print x[i].split(',')[1]
    

    输出:

    h2

    智人

    智人

    智人

    【讨论】:

    • 谢谢。这很有帮助,但不能解决我的问题。对不起,我没有很好地解释它。我有一个非常奇怪的文件,它有多个具有相同标题的列。我需要解析它们并仅提取具有给定字符串的列。
    • 能否在您的问题中添加示例数据
    猜你喜欢
    • 1970-01-01
    • 2014-08-10
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2020-06-29
    相关资源
    最近更新 更多