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

Posted

技术标签:

【中文标题】Numpy - 将具有第一行的csv作为名称立即加载到结构化数组中?【英文标题】:Numpy - load csv with first row as names immediately to a structured array? 【发布时间】:2017-12-13 02:11:14 【问题描述】:

有没有办法避免必须在 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()。这可能吗?

【问题讨论】:

genfromtxt 接受names=True, dtype=Noneloadtxt 应该有类似的东西。您可能需要禁用 cmets。 # 真的是文件的一部分吗? 【参考方案1】:

为了完整起见,举一个numpy的例子:

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

【讨论】:

【参考方案2】:

如果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')

【讨论】:

以上是关于Numpy - 将具有第一行的csv作为名称立即加载到结构化数组中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥将 numpy 数组转换为 csv 文件不显示属性名称,而是将第一行值作为属性名称?

自动检测文件中CSV标题的存在

将 CSV 文件读取到 numpy 数组,第一行为字符串,其余为浮点数

python 用于从CSV文件中按名称选择列(假设第一行包含标题)的小实用程序没有歧义(来自`csvkit`的`csvcut`具有

如何在 Pig 中使用标题(第一行)作为字段名称

将熊猫数据框保存到csv时如何保留numpy数组