2014-08-28 81 views
1

这是我试图使用熊猫读取的数据文件的示例。所有的文件都有不同数量的注释行,但是所有文件都以BEGIN开始数据部分,并以END结尾,并且可能在此之后换行。 读取CSV与熊猫并处理评论

!Example data file 
!With commands delimited by exclamation points 
!Not always the some number of comment lines 
BEGIN 
300,-1.0342501,-0.07359 
5298,-0.9889674,0.06514 
1029,-0.981307,0.130398 
1529,-0.971765,0.1945281 
END 

这是我在这些文件中读取大熊猫。

b = pd.read_csv(data_file,,names=['Frequency','Real','Imaginary'],comment='!') 

有我有两个问题,第一个是它读取所有行,只是填补了注释行也只是NaN的并读取BEGINEND标签。这也导致了单元格索引的偏移,这是我的第二个问题。

什么是正确的熊猫阅读此数据框与删除注释行和BEGINEND标签?有没有一种优雅的代码可以解决我的两个问题?

回答

1

这是你的代码的变化:

In [125]: df = pd.read_csv('data_file.csv', comment='!', header=0, names=['Frequency','Real','Imaginary'], na_values=['END']) 

In [126]: df 
Out[126]: 
    Frequency  Real Imaginary 
0  300 -1.034250 -0.073590 
1  5298 -0.988967 0.065140 
2  1029 -0.981307 0.130398 
3  1529 -0.971765 0.194528 
4  NaN  NaN  NaN 

在最后一行的“END”被转换为NaN,所以我们将删除最后一行:

In [127]: df = df.iloc[:-1] # or `df = df.dropna()` 

In [128]: df 
Out[128]: 
    Frequency  Real Imaginary 
0  300 -1.034250 -0.073590 
1  5298 -0.988967 0.065140 
2  1029 -0.981307 0.130398 
3  1529 -0.971765 0.194528 
+0

此代码不适用于我的示例数据。它给出错误“CParserError:错误标记数据。C错误:预计在第5行的1个字段,看到3” – BKay 2014-08-29 00:48:38

+0

你使用的是什么版本的熊猫?我有0.14.1。 – 2014-08-29 01:32:30

+0

我有版本14.0的熊猫。 – BKay 2014-08-29 10:15:03

2

如何导入整个文件并放下第二个字段为空的所有内容?

​​

结果B:

Frequency  Real Imaginary 
0  NaN  NaN  NaN 
1  NaN  NaN  NaN 
2  NaN  NaN  NaN 
3  BEGIN  NaN  NaN 
4  300 -1.034250 -0.073590 
5  5298 -0.988967 0.065140 
6  1029 -0.981307 0.130398 
7  1529 -0.971765 0.194528 
8  END  NaN  NaN 

结果B2:

Frequency  Real Imaginary 
4  300 -1.034250 -0.073590 
5  5298 -0.988967 0.065140 
6  1029 -0.981307 0.130398 
7  1529 -0.971765 0.194528 

要重置索引:

B3 = b2.reset_index(降=真)

b3的输出:

Frequency  Real Imaginary 
0  300 -1.034250 -0.073590 
1  5298 -0.988967 0.065140 
2  1029 -0.981307 0.130398 
3  1529 -0.971765 0.194528 
+0

非常感谢您的帮助!但是如果我希望索引在这种情况下从0开始计数而不是4进行计数? – thewyliestcoyote 2014-08-29 06:44:16

+0

看看我的新版本的答案,将做到这一点。 – BKay 2014-08-29 10:14:21