Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.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_List_Dataframe - Fatal编程技术网

Python 如何替换列表中的多个项目并为其创建数据帧?

Python 如何替换列表中的多个项目并为其创建数据帧?,python,pandas,list,dataframe,Python,Pandas,List,Dataframe,我有一个非常复杂的列表,我试图改变两件事: id必须变成id Field1必须变成Value1 在那之后,我尝试为它制作一个整洁的数据框架。这是我的预期结果: ID - Value1 0 1 - 1235 1 2 - 5631 2 3 - 9875 3 4 - 2683 4 5 - 97525 5 6 - 6614 我的列表如下所示: my_list = [('www.url1.com'), 1000, [

我有一个非常复杂的列表,我试图改变两件事:

  • id
    必须变成
    id
  • Field1
    必须变成
    Value1
  • 在那之后,我尝试为它制作一个整洁的数据框架。这是我的预期结果:

        ID    - Value1 
    0    1    - 1235
    1    2    - 5631
    2    3    - 9875
    3    4    - 2683
    4    5    - 97525
    5    6    - 6614
    
    我的列表
    如下所示:

    my_list = [('www.url1.com'), 1000, [{'id': 1, 'Field1': 1235}, {'id': 2, 'Field1': 5631}, {'id': 3, 'Field1': 9875}, 'www.google.com)'],
                ('www.url1.com'), 1000, [{'id': 4, 'Field1': 2683}, {'id': 5, 'Field1': 97525}, {'id': 6, 'Field1': 6614}, 'www.google.com)']]
    
       ID  Value1
    0   1    1235
    1   2    5631
    2   3    9875
    3   4    2683
    4   5   97525
    5   6    6614
    
    这是我试图使用的代码。我没有得到任何错误,但也没有得到预期的结果

    import pandas as pd
    
    my_list = [('www.url1.com'), 1000, [{'id': 1, 'Field1': 1235}, {'id': 2, 'Field1': 5631}, {'id': 3, 'Field1': 9875}, 'www.google.com)'],
                ('www.url1.com'), 1000, [{'id': 4, 'Field1': 2683}, {'id': 5, 'Field1': 97525}, {'id': 6, 'Field1': 6614}, 'www.google.com)']]
    
      
    for n, i in enumerate(my_list):
        if i == 'id':
            my_list[n] = 'ID'
            
    
    # print(my_list)
    
    df = pd.DataFrame(my_list)
    
    #print(df)
    

    列表中需要的数据。您可以使用
    isinstance
    筛选列表,然后在列表中选择其类型为
    dict
    的所有元素,然后使用新键创建新字典
    {id':'id','Field1':'Value1'}

    keys = {'id': 'ID', 'Field1': 'Value1'}
    
    res = []
    for x in my_list: 
        if isinstance(x, list):
            res += [{keys[k]: y[k] for k in keys} for y in x if isinstance(y, dict)]
    
    df = pd.DataFrame(res)
    print(df)
    
    使用列表理解

    keys = {'id': 'ID', 'Field1': 'Value1'}
    res = [y for x in my_list if isinstance(x, list) for y in x if isinstance(y, dict)]
    df = pd.DataFrame(res).rename(columns=keys)
    
    输出:

    my_list = [('www.url1.com'), 1000, [{'id': 1, 'Field1': 1235}, {'id': 2, 'Field1': 5631}, {'id': 3, 'Field1': 9875}, 'www.google.com)'],
                ('www.url1.com'), 1000, [{'id': 4, 'Field1': 2683}, {'id': 5, 'Field1': 97525}, {'id': 6, 'Field1': 6614}, 'www.google.com)']]
    
       ID  Value1
    0   1    1235
    1   2    5631
    2   3    9875
    3   4    2683
    4   5   97525
    5   6    6614
    

    您可以仅选择带有ID的列表并将它们放在一起:

    from functools import reduce
    my_list = [('www.url1.com'), 1000, [{'id': 1, 'Field1': 1235}, {'id': 2, 'Field1': 5631}, {'id': 3, 'Field1': 9875}, 'www.google.com)'],
                ('www.url1.com'), 1000, [{'id': 4, 'Field1': 2683}, {'id': 5, 'Field1': 97525}, {'id': 6, 'Field1': 6614}, 'www.google.com)']]
    
    a = reduce(lambda x,y: x+y,[my_list[2::3][i][-2::-1] for i in range(len(my_list[2::3]))])
    
    pd.DataFrame(a).rename(columns = {"id":"ID","Field1":"Value1"})
    
    输出:

        ID  Value1
    0   3   9875
    1   2   5631
    2   1   1235
    3   6   6614
    4   5   97525
    5   4   2683
    

    如果需要,请按ID排序。

    为什么列表中的其他元素不包括在dataframe中?@deadshot,因为这些元素与我的dataframe.Thx无关。你做得很好,你能解释一下你做了什么吗?为什么当我将你的代码应用到一个更大的my_列表时,我没有得到结果?试着打印
    res
    它是空的吗?看起来很正常,但很复杂。。。谢谢你。