为什么pandas数据框将所有数据解释为NaN?

时间:2017-12-18 15:37:38

标签: python pandas dataframe nan

我从csv文件导入数据以用于pandas数据框。我的数据文件有102行和5列,所有这些文件都清楚地标记为' Number'在Excel中。我的代码如下:

import pandas as pd

data = pd.read_csv('uni.csv', header=None, names = ['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low'])

print data.head()

输出如下:

            TopThird  Oxbridge  Russell  Other  Low
0  14\t1\t12\t35\t1       NaN      NaN    NaN  NaN
1   14\t1\t12\t32\t0       NaN      NaN    NaN  NaN
2   16\t0\t13\t33\t0       NaN      NaN    NaN  NaN
3    10\t0\t9\t44\t1       NaN      NaN    NaN  NaN
4   18\t1\t13\t28\t1       NaN      NaN    NaN  NaN

这仍然是数据框的底部。我试图将Excel中的单元格类型更改为' General'或使用'数字'上的小数点类型,但这没有改变任何东西。

为什么会这样?如何预防?

2 个答案:

答案 0 :(得分:0)

看起来像制表符分隔的数据。试试sep='\t'

data = pd.read_csv('uni.csv', sep='\t', header=None, names = ['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low'])

答案 1 :(得分:0)

您的文件似乎是标签分隔值的文件。您需要明确地让read_csv知道它正在将空格字符作为分隔符处理。

在大多数情况下,传递sep='\t'应该有效。

df = pd.read_csv('uni.csv', 
                 sep='\t', 
                 header=None, 
                 names=['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low'])

但是,在某些情况下,列不是完全分隔的。假设您有TSV数字,那么使用delim_whitespace=True -

应该没问题
df = pd.read_csv('uni.csv', 
                 delim_whitespace=True, 
                 header=None, 
                 names=['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low'])  

这相当于sep='\s+',并且稍微宽泛一点,请谨慎使用。从好的方面来说,如果你的列有杂散的空格,那么这应该自动处理。

如@Vaishali所述,有一个替代函数pd.read_table对宽度TSV文件很有用,并且可以使用传递给read_csv的相同参数 -

df = pd.read_table('uni.csv', header=None, names=[...])