5

何らかの理由で、このマージを正しく機能させることができません。

このデータフレーム (rspars) には 2,000 行以上あります...

    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

このデータフレームへの列に基づいて上記をテーブルに結合しようとするとrsparid...

            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

これを使って...

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

私は空白を取得します..

   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

「datalines」列には、rspars よりも数千行多いため、左結合であることに注意してください。私は何か間違ったことをしているに違いない?

私もこの方法でやってみました…

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

例 2

データを数行に落としました...

rspar:

    rsparid  f1mult  f2mult  f3mult
 0     1400   0.216   0.435   0.656

データライン:

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

マージ中...

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

出力...

   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
4

1 に答える 1

4

NaNs はrsparid、共通の値がないことを意味します。これは、同じように見えるものをマージするときに注意が必要です。repr

DataFrames文字列 (整数の) または整数を使用したsmall の repr は同じように見え、dtypeフレームが小さい場合は情報が出力されません。DataFrame.info()次のようにメソッドを呼び出すことで、小さなフレームのこの情報 (およびその他) を取得できますdf.info()。これにより、 の内容とその列の s がDataFrame何であるかを簡単に要約できます。dtype

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)

注:ここで s にわずかな違いがあることに気付くでしょう。reprこれはおそらく、数値DataFrames のパディングが原因です。ポイントは、特に違いを探していない限り、これをインタラクティブに使用することを実際に確認できる人はいないということです。

于 2013-08-24T14:47:44.137 に答える