python过滤dataframe得到意外的一个ex

2024-05-20 03:49:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在加载一些CSV文件:

apds = pandas.read_csv( out + '.apds.txt', sep='\t' )
cnds = pandas.read_csv( out + '.cnds.txt', sep='\t' )
gnds = pandas.read_csv( out + '.genotype.txt', sep='\t' )

这样做的目的是减少具有相同索引的3个数据帧,但加载到gnds的文件没有索引,我必须将其添加为:

names = cnds.ix[ gnds.Index ][ 'ProbeSetName' ]
names = names.reset_index()[ 'ProbeSetName' ]
gnds[ 'ProbeSetName' ] = names

现在,3个datafame有一个名为“ProbeSetName”的列,我将用作索引:

gnds = gnds.set_index( 'ProbeSetName' )
cnds = cnds.set_index( 'ProbeSetName' )
apds = apds.set_index( 'ProbeSetName' )

因此,我们的想法是用每个数据帧的“ProbeSetName”共同元素创建一个熊猫系列:

im = list( set.intersection( set( gnds.index ), set( cnds.index ), set( apds.index ) ) )
s = pandas.Series( im )

因此,“s”具有3个数据帧的公共元素。我可以用以下方法过滤数据帧:

apds_f = apds.ix[ s ]
cnds_f = cnds.ix[ s ]
gnds_f = gnds.ix[ s ]

它工作得很好,但当我这样做的时候:

print len( apds_f ), len( cnds_f ), len( gnds_f )

我得到了:

697077 697077 697078

…我不知道为什么!?你知道吗


Tags: csv数据txtpandasreadindexnamesout