数据帧上的Pandas单列子集生成数据帧

时间:2014-09-04 14:30:20

标签: python pandas

这实际上是两个数据框的故事,而且行为奇怪不同。

我有两个csv文件,我正在读大熊猫。每个文件都没有标题;头文件分开存储。像这样:

$ ls
A.csv A.header B.csv B.header

我使用pandas来阅读这些内容,但首先我需要解析标题:

def make_header(flnm):
    return open(flnm, 'rb').read().strip(' \t\n\r').split(',')

A_header = make_header('A.header')
B_header = make_header('B.header')

现在我可以阅读csvs:

A = read_csv('A.csv', header=0, names=A_header)
B = read_csv('B.csv', header=0, names=B_header)

让我们确保这项工作正常:

print type(A)
print type(B)

结果是:

<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>

正如所料。

现在出现了我无法理解的陌生感。我想从每个数据框中选择一个列。当我这样做时,其中一个数据框返回一个Series对象(正如我所料),一个返回一列DataFrame:

print type(A.A_x)
print type(B.B_x)

结果:

<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>

据我所知,我从头到尾都对这些文件进行了相同的处理,但结果却不一样。可能是什么导致了这个?我对数据的处理或我对大熊猫的理解存在缺陷在哪里?

我调查的几件事

这两列具有相同的数据类型:

print A.A_x.dtype
print B.B_x.B_x.dtype

给出:

int64
int64

(当然,由于我观察到的奇怪行为,我必须从B数据框中选择两次列。)

我还检查了标题中的重复名称:

$ cat A.header | sed 's/,/\n/g' | grep A_x
> A_x

$ cat B.header | sed 's/,/\n/g' | grep B_x
> B_x

因此,每个名称都只出现一次。

0 个答案:

没有答案