我从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'或使用'数字'上的小数点类型,但这没有改变任何东西。
为什么会这样?如何预防?
答案 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=[...])