2013-10-02 1 views
1

두 개의 큰 데이터 청크가 있으며 두 개의 공통 열이 함께 묶입니다. 하나는 다른 하나의 서브 세트 여야하지만, 병합을 수행 할 때 최종 제품은 서브 세트보다 작기 때문에 원본의 행과 서브 세트의 행을보고 싶습니다. 왜 제대로 병합에 실패했는지. 그것은 업스트림 스크립트에서 아마도 약간의 오류 일지 모르지만, 나의 newbie pandas 사용에는 오류가있을 수 있습니다.병합 결과에 DataFrame의 어떤 행이 없음을 판별하는 "판다"방법이 있습니까?

두 데이터 집합의 값을 반복하고 병합되지 않은 데이터를 찾는 명백한 방법이 있지만이를 수행하는 데 "판다"방법이 있다고 가정하고 있습니다. .

chip_raw= pandas.read_csv(filename, names=["CHROM", "POS", "GT", "score", "rsid"], sep=" ") 
seq_data= pandas.read_csv(seq_filename, names=["CHROM", "POS", "vcf_gt", "gq"], sep="\t") 
merged = pandas.merge(chip_raw, seq_data, on=["CHROM", "POS"], how="inner") 

데이터가 서로 어떻게 관련되는지 예를 보여주기 위해 편집했습니다. 나는 CHROM과 POS에 고유하게 묶여있는 chip_raw에 GT, score, rsid를 가지고있다.이 두 열은 함께 유일성을 나타낸다. 그렇다면 다른 파일에서 온 vcf_gt와 gq가 있습니다. 나는 병합되지 않은 chip_raw에 무엇이 있는지보고 싶다. seq_data/merged에 대해서도 같다.

팬더를 배우고 있기 때문에 팬더를 사용하는 것에 대해 궁금해합니다. 라이브러리가 각 항목을 반복하고 현재 병합되어 있는지 확인하는 것보다 효율적으로 수행 할 것으로 보입니다.

+0

일부 데이터와 문제를 설명하는 코드 샘플을 보여주십시오. –

답변

2

경우에 따라 NaNouter 병합 결과를 검사하는 경우가 있습니다. 또한 문제를 만드는 병합의 어느 쪽 식별 할 수 있습니다 right 또는 left를 사용

In [119]: dfrm 
Out[119]: 
      A   B   C D 
0 -1.312700 0.760710 1.044006 0 
1 -0.792521 -0.076913 0.087334 1 
2 -0.557738 0.982031 1.365357 2 
3 1.013947 100.000000 -0.356652 3 
4 1.278278 100.000000 0.550492 4 
5 0.116599 100.000000 -1.290245 5 
6 -1.808143 -0.818014 0.713614 6 
7 0.233726 100.000000 0.561103 7 
8 2.344671 100.000000 -0.759296 8 
9 -1.658047 1.756503 -0.996620 9 

In [120]: dfrm1 = dfrm.copy() 

In [121]: dfrm1.ix[3, 'D'] = 888 

In [122]: dfrm1 
Out[122]: 
      A   B   C D 
0 -1.312700 0.760710 1.044006 0 
1 -0.792521 -0.076913 0.087334 1 
2 -0.557738 0.982031 1.365357 2 
3 1.013947 100.000000 -0.356652 888 
4 1.278278 100.000000 0.550492 4 
5 0.116599 100.000000 -1.290245 5 
6 -1.808143 -0.818014 0.713614 6 
7 0.233726 100.000000 0.561103 7 
8 2.344671 100.000000 -0.759296 8 
9 -1.658047 1.756503 -0.996620 9 

In [123]: pandas.merge(dfrm, dfrm1, left_on='D', right_on='D', how='outer') 
Out[123]: 
     A_x   B_x  C_x D  A_y   B_y  C_y 
0 -1.312700 0.760710 1.044006 0 -1.312700 0.760710 1.044006 
1 -0.792521 -0.076913 0.087334 1 -0.792521 -0.076913 0.087334 
2 -0.557738 0.982031 1.365357 2 -0.557738 0.982031 1.365357 
3 1.013947 100.000000 -0.356652 3  NaN   NaN  NaN 
4 1.278278 100.000000 0.550492 4 1.278278 100.000000 0.550492 
5 0.116599 100.000000 -1.290245 5 0.116599 100.000000 -1.290245 
6 -1.808143 -0.818014 0.713614 6 -1.808143 -0.818014 0.713614 
7 0.233726 100.000000 0.561103 7 0.233726 100.000000 0.561103 
8 2.344671 100.000000 -0.759296 8 2.344671 100.000000 -0.759296 
9 -1.658047 1.756503 -0.996620 9 -1.658047 1.756503 -0.996620 
10  NaN   NaN  NaN 888 1.013947 100.000000 -0.356652 

.

+0

좋은 제안. 나는 이것을 위해 외부 조인을 사용하는 것에 대해 생각하지 않았지만, 그것은 완벽합니다. – user632657

관련 문제