只想读取其中的 5 列:1,3,4,5,6
在 jupyter notebook 中执行以下代码
%matplotlib inline
import matplotlib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
dtype1 ={'names':('R','c','sigma_r','sigma_t','sigma_h'),'formats':(np.float64, np.float64, np.float64, np.float64, np.float64)}
name2 = {'R','c','sigma_r','sigma_t','sigma_h'}
dtype2 = {'R': np.float64,'c': np.float64,'sigma_r': np.float64,'sigma_t': np.float64,'sigma_h': np.float64}
a = np.loadtxt('./TS015.dat', dtype=dtype1, usecols=(0,2,3,4,5))
data = pd.read_csv("./TS015.dat",skiprows=2,header=0, sep='\s+', index_col=None, names=name2, dtype=dtype2, usecols=[0,2,3,4,5])
结果发现数组 a 的结果是对的,而 data 里读取的各列的标题是乱的,并不是我想要的‘ R ’对应于第一列,‘ c ’对应于第二列。不知道是不是 read_csv 函数有什么参数没有设置对?
使用的环境是 Ubuntu 下通过 pyenv 安装的 anaconda3-4.3.1,notebook 信息: Server Information:
You are using Jupyter notebook.
The version of the notebook server is: 5.4.1-bcc8ab2 The server is running on this version of Python:
Python 3.6.4 | packaged by conda-forge | (default, Dec 23 2017, 16:31:06)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)]
Current Kernel Information:
Python 3.6.4 | packaged by conda-forge | (default, Dec 23 2017, 16:31:06)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
我另外在 ubuntu17.10 的虚拟机里尝试了同样的代码,read_csv 读取到的结果也不对,names 和列似乎是随意匹配的一样。。。
请各位指正,先谢过。
1
imn1 2018-03-27 10:19:53 +08:00 1
我记得 names 需要 list,也就是有序,你这个 set 是无序的
|
2
kingmo888 2018-03-27 10:33:52 +08:00
set 本身就是无序的。。
|
3
zhusimaji 2018-03-27 10:38:33 +08:00
names 要使用 list 类型,保证有序,楼上两个已经说得清楚了。。。
|