代码之家  ›  专栏  ›  技术社区  ›  jxpython

跳过列pandas/用逗号分隔的多个空列表

  •  2
  • jxpython  · 技术社区  · 8 年前

    我想写一些数据帧到一个csv文件。但是,F到N列应该是空的。这是我使用的数据帧:

    data = [['car'], ['bus'], ['laptop'], ['tv', 'chair'], ['music', 'pop'], ['shoe']]
    dataFrame = pandas.DataFrame(data).transpose()
    

    前五个列表分别位于A到E列中。例如, 'laptop' 在C列下。但是,使用当前代码 'shoe' 在F列下面。是否有方法告诉此数据帧它应该跳过F到N列并写入 “鞋” 在O列下面?换句话说,在E列和O列之间应该有空列。

    如果不可能的话。我认为至少可以写 [], [], [] 很多次。有没有办法用逗号分隔这些空列表 for 循环还是什么?

    谢谢你的阅读。

    4 回复  |  直到 8 年前
        1
  •  2
  •   ALollz    8 年前

    我觉得你应该和一个 dictionary 通过这种方式,您可以显式地说明每个列表应包含哪些列,而不是列表。然后重新索引,使它们出现在正确的位置。

    import pandas as pd
    import string
    
    data = {'A': ['car'], 'B': ['bus'], 'C': ['laptop'], 
            'D': ['tv', 'chair'], 'E': ['music', 'pop'], 'O':['shoe']}
    df = (pd.DataFrame.from_dict(data, orient='index')
            .reindex(list(string.ascii_uppercase))
            .truncate(after='O', axis=0).T)
    

    输出:

          A     B       C      D      E    F    G    H    I    J    K    L    M    N     O
    0   car   bus  laptop     tv  music  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  shoe
    1  None  None    None  chair    pop  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  None
    

    现在如果你这样做 df.to_csv('file_name.csv', index=False, header=False) 列将如您在.csv中所需。

    CSV输出:

    car,bus,laptop,tv,music,,,,,,,,,,shoe
    ,,,chair,pop,,,,,,,,,,
    

    如果您需要更多的列,那么前702个Excel列是:

    from itertools import product
    l = list(string.ascii_uppercase)+[x+y for x,y in product(string.ascii_uppercase, string.ascii_uppercase)]
    
        2
  •  1
  •   Joshua Yonathan    8 年前

    在此之前插入9个空列表 shoe 把鞋子放进 O 柱

    for i in range(9):
        data.insert(-1, [])
    dataFrame = pandas.DataFrame(data).transpose()
    
        3
  •  0
  •   Swagga Ting    8 年前

    使用列表理解:

    In [1]: ll = [[] for x in range(5)]
    
    In [2]: ll
    Out[2]: [[], [], [], [], []]
    
        4
  •  0
  •   andrew_reece    8 年前

    你可以用熊猫 insert() 在一个值范围内:

    import string
    alphabet = string.ascii_uppercase
    
    [dataFrame.insert(i, f"{alphabet[i]}", '') for i in range(5,14)]
    
    dataFrame
          0     1       2      3      4 F G H I J K L M N     5
    0   car   bus  laptop     tv  music                    shoe
    1  None  None    None  chair    pop                    None