0

2つのデータフレームを左マージしようとしていますが、問題が発生しています。適切なデータフレームにある列のNaNのみを取得します。

これは私がしたことです:

X = read_csv('fileA.txt',sep=',',header=0);
print "-----FILE DATA-----"
print X;
X = X.astype(object); # convert every column to string type? does it do it?
print "-----INTERNALS-----"
pprint(vars(X));

Y = file_to_dataframe('fileB.txt',',',0); 
print "-----FILE DATA-----"
print Y;
print "-----INTERNALS-----"
pprint(vars(Y));

Z = merge(X,Y,how='left');
print Z;
sys.exit(); 

Y = file_to_dataframe('tmp.chr20.thresh.frq.count','\t',0);
print Y.dtypes;

def file_to_dataframe(filename,sep,header): # list of dict's
    i = 0; k = 0;
    cols = list();
    colNames = list();
    for line in fileinput.input([filename]):
        line = line.rstrip('\n');
        lst = line.split(sep);
        if i == header: #  row number to use as the column names
            for colName in lst:
                colNames.append(colName);
        elif i > header:
            j = 0;
            record = dict();
            for j in range(0,len(lst)): # iterate over all tokens in the current line
                if j >= len(colNames):
                    colNames.append('#Auto_Generated_Label_'+ str(k));
                    k += 1;
                record[colNames[j]] = lst[j];
            cols.append(record); # push the record onto stack
        i += 1;
    return DataFrame.from_records(cols);

出力は次のとおりです。

-----ファイルデータ-----

   Chrom      Gene  Position


0     20    DZANK1  18446022


1     20      TGM6   2380332


2     20  C20orf96    271226

-----内部-----

{'_data': BlockManager


Items: array([Chrom, Gene, Position], dtype=object)


Axis 1: array([0, 1, 2])


ObjectBlock: array([Chrom, Gene, Position], dtype=object), 3 x 3, dtype object,


 '_item_cache': {}}

-----ファイルデータ-----

  Chrom  Position Random


0    20  18446022    ABC


1    20   2380332    XYZ


2    20    271226    PQR

-----内部-----

{'_data': BlockManager


Items: array([Chrom, Position, Random], dtype=object)


Axis 1: array([0, 1, 2])


ObjectBlock: array([Chrom, Position, Random], dtype=object), 3 x 3, dtype object,


 '_item_cache': {}}



  Chrom      Gene  Position Random

0    20  C20orf96    271226    NaN

1    20      TGM6   2380332    NaN

2    20    DZANK1  18446022    NaN

ご覧のとおり、Yのランダム列からの値があるはずのNaNの列があります。これをデバッグする方法について何かアイデアはありますか?

4

1 に答える 1

1

私のために働いています(v0.10.0b1、私はある程度自信がありますが、チェックしていません-これは0.9.1でも機能します):

In [7]: x
Out[7]: 
   Chrom      Gene  Position
0     20    DZANK1  18446022
1     20      TGM6   2380332
2     20  C20orf96    271226

In [8]: y
Out[8]: 
   Chrom  Position Random
0     20  18446022    ABC
1     20   2380332    XYZ
2     20    271226    PQR

In [9]: pd.merge(x, y, how='left')
Out[9]: 
   Chrom      Gene  Position Random
0     20    DZANK1  18446022    ABC
1     20      TGM6   2380332    XYZ
2     20  C20orf96    271226    PQR

すべての列がオブジェクトdtypeであることに非常に驚いています。データには何らかの解析の問題があるはずです。各列の値を調べてください(どのように見えるかではなく、実際に何であるか、文字列、int、何ですか?)

于 2012-12-13T02:37:59.457 に答える