2013-08-24 17 views
5

Bazı nedenlerden dolayı, bu birleşimin doğru şekilde çalışmasını sağlayamıyorum.Veri Levhaları Pandalarda Birleştirme

Bu Dataframe (rspars) 2.000 + satırlar var ...

rsparid f1mult f2mult f3mult 
0  1 0.318 0.636 0.810 
1  2 0.348 0.703 0.893 
2  3 0.384 0.777 0.000 
3  4 0.296 0.590 0.911 
4  5 0.231 0.458 0.690 
5  6 0.275 0.546 0.839 
6  7 0.248 0.486 0.731 
7  8 0.430 0.873 0.000 
8  9 0.221 0.438 0.655 
9  11 0.204 0.399 0.593 

bu Dataframe için rsparid sütunları temel bir tabloya yukarıdaki katılmaya çalışıyor ...

  line_track line_race rsparid 
line_date        
2013-03-23   TP   10 1400 
2013-02-23   GP   7  634 
2013-01-01   GP   7 1508 
2012-11-11  AQU   5  96 
2012-10-11  BEL   2  161 

Bu kullanma ...

df = pd.merge(datalines, rspars, how='left', on='rsparid') 

Ben boşlukları olsun ..

line_track line_race rsparid f1mult f2mult f3mult 
0   TP   10 1400  NaN  NaN  NaN 
1   TP   10 1400  NaN  NaN  NaN 
2   TP   10 1400  NaN  NaN  NaN 
3   GP   7  634  NaN  NaN  NaN 
4   GP   10  634  NaN  NaN  NaN 

"Veritabanları" sütununun rsparlardan daha fazla sıraya sahip olabileceğini unutmayın, böylece sol birleştirin. Yanlış bir şey yapmalı mıyım? Birkaç satır aşağı veri düştü 2

Ben de bu şekilde çalıştı ...

df = datalines.merge(rspars, how='left', on='rsparid') 

ÖRNEK # ...

rspars:

rsparid f1mult f2mult f3mult 
0  1400 0.216 0.435 0.656 

datalines:

rsparid 
0 1400 
1  634 
2 1508 
3  96 
4  161 
5 1011 
6 1007 
7  518 
8 1955 
9  678 

birleştiriliyor ...

datalines.merge(rspars, how='left', on='rsparid') 

Çıktı ...

rsparid f1mult f2mult f3mult 
0 1400  NaN  NaN  NaN 
1  634  NaN  NaN  NaN 
2 1508  NaN  NaN  NaN 
3  96  NaN  NaN  NaN 
4  161  NaN  NaN  NaN 
5 1011  NaN  NaN  NaN 
6 1007  NaN  NaN  NaN 
7  518  NaN  NaN  NaN 
8 1955  NaN  NaN  NaN 
9  678  NaN  NaN  NaN 
+0

Biraz 'datalines' gösterebiliyor musunuz? –

+0

İlk gösterilen Dataframe, rsparlardır. Veri tabloları, bir tanesi rsparid olan düzinelerce tarlaya sahiptir. – TravisVOX

+0

Netlik için biraz daha fazla bilgi ekledim. – TravisVOX

cevap

4

NaN ler ortak noktaları rsparid hiçbir değerlere sahip anlamına gelir. onlar

(tamsayılar) dizeleri veya tamsayılar küçük DataFrames ait repr aynı görünüyor repr ve çerçeveler küçük olduğunda ortada hiçbir dtype bilgiler basıldığında aynı görünebilir şeyleri birleştirirken Bu yanıltıcı olabilir. Bu bilgileri (ve daha pek çok) DataFrame.info() yöntemini çağırarak küçük çerçeveler için alabilirsiniz: df.info().

In [205]: datalines_int = DataFrame({'rsparid':[1400,634,1508,96,161,1011,1007,518,1955,678]}) 

In [206]: datalines_str = DataFrame({'rsparid':map(str,[1400,634,1508,96,161,1011,1007,518,1955,678])}) 

In [207]: datalines_int 
Out[207]: 
    rsparid 
0  1400 
1  634 
2  1508 
3  96 
4  161 
5  1011 
6  1007 
7  518 
8  1955 
9  678 

In [208]: datalines_str 
Out[208]: 
    rsparid 
0 1400 
1  634 
2 1508 
3  96 
4  161 
5 1011 
6 1007 
7  518 
8 1955 
9  678 

In [209]: datalines_int.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 10 entries, 0 to 9 
Data columns (total 1 columns): 
rsparid 10 non-null values 
dtypes: int64(1) 

In [210]: datalines_str.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 10 entries, 0 to 9 
Data columns (total 1 columns): 
rsparid 10 non-null values 
dtypes: object(1) 

NOT: Burada repr s bir hafif fark, büyük ihtimalle fark edeceksiniz Bu sana güzel DataFrame içinde ne özetini ve sütunların dtype ler ne verecek numerik DataFrame s doldurma nedeniyle. Önemli olan, hiç kimsenin bu farkı, özellikle de aradaki farkı bulmadığı sürece, etkileşimli olarak kullanabileceğini göremez.

+0

rsparid'in varlığını göstermek için rspar tablosunu nasıl indekslediğimi örnekte ekledim. "Read_csv" ile doğrudan bir CSV dosyasından geliyor ve rsparid'ler kesinlikle orada. – TravisVOX

+0

Bence 'birleştirme' yanlış anlıyorsun. Eğer "rspars.rsparid" deki değerlere eşit olan "datalines.rsparid" dosyasında * * değeri yoksa * katılacak bir şey olmadığı için NaN alırsınız. –

+0

Hey, ikinci örneğime bakarsak, verileri orada olan yere indirdim, hala sorunu yaşıyorum. – TravisVOX

İlgili konular