首页 > 解决方案 > 如何从第一个元素是python中的列名的列表中创建单列的DataFrame

问题描述

我在 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。

标签: pythonlistpandas

解决方案


我认为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

推荐阅读