我試圖做兩個數據框之間的簡單合併。這些來自兩個不同的SQL表,其中加入鍵是字符串:熊貓 - 合併字符串列不工作(錯誤?)
>>> df1.col1.dtype
dtype('O')
>>> df2.col2.dtype
dtype('O')
我嘗試使用這個合併它們:
>>> merge_res = pd.merge(df1, df2, left_on='col1', right_on='col2')
內連接的結果是空的,它首先促使我在十字路口可能沒有任何條目:
>>> merge_res.shape
(0, 19)
但是,當我嘗試匹配單個元素時,我看到了這個非常奇怪的行爲。
# Pick random element in second dataframe
>>> df2.iloc[5,:].col2
'95498208100000'
# Manually look for it in the first dataframe
>>> df1[df1.col1 == '95498208100000']
0 rows × 19 columns
# Empty, which makes sense given the above merge result
# Now look for the same value as an integer
>>> df1[df1.col1 == 95498208100000]
1 rows × 19 columns
# FINDS THE ELEMENT!?!
所以,這些列是用'object'dtype定義的。搜索它們作爲字符串不會產生任何結果。搜索他們作爲整數確實會返回一個結果,我認爲這就是爲什麼合併不成功的原因。
任何想法是怎麼回事?
這幾乎就像思想熊貓轉換df1.col1
爲整數,只是因爲它可以,即使它應該將同時匹配視爲字符串。
(我試圖複製這種使用樣本dataframes,但對於小例子,我沒有看到這種行爲。我如何能找到一個更具描述性的例子任何建議,將和感激。)
它看起來像您已在列混合dtypes,我建議您首先嚐試強迫所有值數值所以'DF1 [」下一次嘗試'df1 ['col1'] = pd.to_numeric(df1 [ 'col1'],errors ='coerce')'這會強制duff值到'NaN',在那裏它可以 – EdChum
啊,謝謝@EdChum!一些值可以轉換爲「int」,但其他值不能。因此,該列的正確的dtype應該是'str',但由於這不是一個合適的dtype,所以我認爲'object'會起作用。但是,當我手動將所有內容轉換爲'str'時,合併確實奏效。謝謝! – user1496984
你能發表一個答案,然後在幾天內接受你自己的答案,所以這個問題並不是沒有答案,謝謝 – EdChum