pandas 读取到的数据和 names 不对应

2018-03-27 10:00:21 +08:00
 ossphil

我的文件是这样的:

只想读取其中的 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 和列似乎是随意匹配的一样。。。

请各位指正,先谢过。

2232 次点击
所在节点    Python
4 条回复
imn1
2018-03-27 10:19:53 +08:00
我记得 names 需要 list,也就是有序,你这个 set 是无序的
kingmo888
2018-03-27 10:33:52 +08:00
set 本身就是无序的。。
zhusimaji
2018-03-27 10:38:33 +08:00
names 要使用 list 类型,保证有序,楼上两个已经说得清楚了。。。
ossphil
2018-03-27 10:43:19 +08:00
@imn1
@kingmo888
@zhusimaji
惭愧,改成 name2 = ['R','c','sigma_r','sigma_t','sigma_h']就对了。原来把列表写成字典类型了。对 python 完全没有了解,现照着例子做的,犯了这样的低级错误。非常感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/441684

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX