Numpy - 将第一行的csv作为名称立即加载到结构化数组中?

时间:2017-07-09 06:00:48

标签: python csv pandas numpy

有没有办法避免必须在numpy / pandas中预定义列标题的名称来创建结构化数组,而是在第一行中读取numpy / pandas作为标题名称,并加载其余数据到结构化数组?例如。对于这些数据,

#        Date     low    open   close
#  2015-08-08  266.00  280.04  266.82
#  2015-07-08  233.00  280.04  266.82

我想调用a = pd.read_csv()这样的函数,并且能够立即以a['Date']的形式访问列,而无需预先定义names = [Date, low, open, close]并且必须将其传递到read_csv()。这可能吗?

2 个答案:

答案 0 :(得分:1)

为了完整起见,一个笨拙的例子:

rec_arr = np.genfromtxt("try.csv", delimiter = " ", names=True, dtype=None)
rec_arr
array([(b'2015-08-08',  266.,  280.04,  266.82),
       (b'2015-07-08',  233.,  280.04,  266.82)],
      dtype=[('Date', 'S10'), ('low', '<f8'), ('open', '<f8'), ('close', '<f8')])

然后,您可以访问以下列:

rec_arr['close']
array([ 266.82,  266.82])

像往常一样做一些数学运算:

rec_arr['close'].mean()
266.81999999999999

答案 1 :(得分:0)

如果read_csv中没有参数names,则第一行数据会创建df列。

所以工作:

df = pd.read_csv('file.csv')
#if necessary change default parameter sep=','
df = pd.read_csv('file.csv', sep=';')
print (df)
         Date    low    open   close
0  2015-08-08  266.0  280.04  266.82
1  2015-07-08  233.0  280.04  266.82

print (df.columns)
Index(['Date', 'low', 'open', 'close'], dtype='object')