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=None
。 loadtxt
应该有类似的东西。您可能需要禁用 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 文件读取到 numpy 数组,第一行为字符串,其余为浮点数
python 用于从CSV文件中按名称选择列(假设第一行包含标题)的小实用程序没有歧义(来自`csvkit`的`csvcut`具有