代码之家  ›  专栏  ›  技术社区  ›  Shuvayan Das

如何从列表中创建单列的数据帧,其中第一个元素是python中的列名

  •  0
  • Shuvayan Das  · 技术社区  · 6 年前

    我有一个csv中的以下数据,我正在尝试通过一次从csv中选择每一列来创建一个1列的数据帧。

    sv_m1   rev     ioip    
    0       15.31   40      
    0       64.9    0       
    0       18.36   20      
    0       62.85   0       
    0       10.31   20      
    0       12.84   10      
    0       69.95   0       
    0       32.81   20  
    

    我得到的列表,第一个值是列名,其余的是值。

    input_file = open('df_seg_sample.csv', 'r')
    c_reader = csv.reader(input_file, delimiter=',')
    #Read column
    column = [x[1] for x in c_reader]
    label = column[0]
    column = column[1:]
    df_column = pd.DataFrame.from_records(data = column,columns = label)
    

    但这给了我一个错误:

      TypeError: Index(...) must be called with a collection of some kind, 'sv_m1' was passed
    

    core实际上是列名。

    如何创建此df? df的列名将是列表中的第一个元素,列表中的所有其他项将是列值。

    不使用pandas.read_csv的原因是: 数据帧很大,占用了大量内存。所以我想一次读一列,做一些处理,然后把它写到另一个csv。

    1 回复  |  直到 6 年前
        1
  •  1
  •   jezrael    6 年前

    我认为需要 read_csv 这里有 usecols 筛选器第二列的参数:

    df = pd.read_csv('df_seg_sample.csv', usecols=[1])
    print (df)
         rev
    0  15.31
    1  64.90
    2  18.36
    3  62.85
    4  10.31
    5  12.84
    6  69.95
    7  32.81
    

    但如果想使用你的解决方案就必须添加 [] 对于一个项目列表,仅用于列名称并使用 DataFrame 承包商:

    data = [x[1] for x in c_reader]
    print (data)
    ['rev', '15.31', '64.9', '18.36', '62.85', '10.31', '12.84', '69.95', '32.81']
    
    df = pd.DataFrame(data[1:], columns=[data[0]])
    print (df)
         rev
    0  15.31
    1   64.9
    2  18.36
    3  62.85
    4  10.31
    5  12.84
    6  69.95
    7  32.81