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

问题描述 投票:0回答:2

我正在从csv文件导入数据以用于pandas数据框。我的数据文件有102行和5列,并且所有这些文件在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中的单元格类型更改为“常规”或使用“数字”类型上的小数点,但这并没有改变任何内容。

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

python pandas dataframe nan
2个回答
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=[...])

0
投票

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

data = pd.read_csv('uni.csv', sep='\t', header=None, names = ['TopThird', 'Oxbridge', 'Russell', 'Other', 'Low'])
© www.soinside.com 2019 - 2024. All rights reserved.