Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python,我们如何选择非常特定的行和关联的列_Python_Pandas_Dataframe - Fatal编程技术网

使用python,我们如何选择非常特定的行和关联的列

使用python,我们如何选择非常特定的行和关联的列,python,pandas,dataframe,Python,Pandas,Dataframe,我仍在学习python,如果这个问题对某些人来说微不足道,请原谅 我有一个以下格式的csv文件,我想提取其中的一小部分并写入另一个csv文件: 所以,这就是我想做的: 只需提取actor_list2下的条目和相应的id列,并以以下格式将其写入csv文件 由于格式不是后跟一些值的常规列标题,因此我不确定如何根据特定列中的单元格值选择起始点。即使我们考虑ACTROLIList2,它也可以有任意数量的条目。请帮助我了解是否可以使用熊猫数据帧处理功能完成 更新:我之所以想将其自动化,是因为可能有数千

我仍在学习python,如果这个问题对某些人来说微不足道,请原谅

我有一个以下格式的csv文件,我想提取其中的一小部分并写入另一个csv文件:

所以,这就是我想做的:

  • 只需提取actor_list2下的条目和相应的id列,并以以下格式将其写入csv文件
  • 由于格式不是后跟一些值的常规列标题,因此我不确定如何根据特定列中的单元格值选择起始点。即使我们考虑ACTROLIList2,它也可以有任意数量的条目。请帮助我了解是否可以使用熊猫数据帧处理功能完成


    更新:我之所以想将其自动化,是因为可能有数千个这样的文件,手动获取这些信息来创建最终的csv文件是不切实际的,因为每个文件都有一行。

    由于您拥有的
    csv
    文件不是常规文件,所以有很多空位置,包含“nan”对象的。同时,这些列将被编入索引

    我会用熊猫来读书

    import pandas as pd
    df = pd.read_csv("not_regular_format.csv", header=None)
    
    然后,初始化并清空字典以将结果存储在中,并使用它构建输出数据框架,最终将其内容发送到
    CSV
    文件

    target={}
    
    df_output=pd.DataFrame(target)
    df_output.to_csv('output.csv')
    
    现在,您需要在第二列(索引为
    0
    的列)中找到
    actor_list2
    ,如果它存在,开始在字典
    target
    中的下一行和列
    1
    2
    中存储名称和分数

    rows_index = df[df[1] == 'actor_list2'].index
    if len(rows_index) > 0:
        i = rows_index[0]
        while True:
            i += 1
            name = df.iloc[i, 1]
            score = df.iloc[i, 2]
            if pd.isna(name): # the names sequence is finished and 'nan' object exists.
                break
            target[name] = [score]
    
    最后,构造DataFrame并编写新的
    output.csv
    文件

    target={}
    
    df_output=pd.DataFrame(target)
    df_output.to_csv('output.csv')
    
    现在,您可以使用上面给出的示例去任何地方


    祝你好运

    正如努尔·阿拉所指出的,这里的格式至少可以说不是很规范。如果您的数据每次都是这样显示的,那么您最好跳过文件中的某些行:

    import pandas as pd
    
    df = pd.read_csv('blabla.csv', skiprows=list(range(17)), nrows=8)
    df_res = df.loc[:, ['actor_list2', 'ID']]
    
    这应该会得到结果,但考虑到格式的不稳定性,这是无法实现自动化的。如果下次有另一个演员呢?还是少一个?即使是努尔·安拉的解决方案也无济于事


    老实说,你应该得到更好的数据。

    它可以自动化吗?对它应该是自动化的吗?不是真的。我宁愿把精力放在获取一个正常格式的csv数据上,然后再拿这个来开玩笑。你为什么否决它?一个问题就是一个问题,你可能会提出不同的解决方案,但有什么必要否决投票?我没有。是别人干的。不知道为什么。对我来说,这是一个明智的问题,但再一次,更好的解决方案是获得更好的数据。自动化这将是乏味的。当pandas读取csv时,默认情况下,它将第一行作为列名读取。。。在你的例子中,它将是“总时间”,“4426.72”和一堆南。考虑到格式的不稳定性,即使您通过跳过一些行并设置特定的行和列名来正确加载它,也无法解决下次再增加一行的问题。我只有一个建议方法,而不是严格的解决方案。你的解决方案也是基于观察@帕维尔