私はpandasに参加/合併する際にいくつかの問題があるようです。 (私は今まで、この問題を持っていたことがありません)だから、今の私はこれまでのところ、このコードを持っている:は、マジックを得ることができないか、またはPythonのパンダで動作するように結合するように見えません。
from difflib import SequenceMatcher
import pandas as pd
import numpy as np
import pyodbc
conn_str = (
r'Driver={SQL Server};'
r'Server=fake.fake.lan;'
r'Database=fake;'
r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)
attr = pd.read_excel('AttrList.xlsx')
attr['PATIENT NAME1'] = attr['LAST_NAME'] + ', ' + attr['FIRST_NAME']
sql = '''SELECT ssn.Client_ID,
ssn.SSN,
n.LastName + ', ' + n.FirstName AS clientname
FROM limiteddb.dbo.Client_SSN AS ssn
INNER JOIN limiteddb.dbo.ClientName AS n ON n.Client_ID = ssn.Client_ID
AND n.ORG_ID = 1;'''
data = pd.DataFrame(pd.read_sql(sql, cnxn))
は今、この時点で私は私がSSNに基づいて一緒にマージしたい2つのデータフレームを持っています。 (どちらもSSNの列を持っています)しかし何らかの理由で、私はそれを動作させるように見えません。
私は以下を試しましたが、私がマージすると、私の2つのSSN列が一致しません。 (例えば、私はSSN1は485358751とSSN2は、行1の952147652なることがありますすべての私の例は偽物です)2つのSSNのいずれもが互いに一致するように見えるん:私もマージを試してみた
merged = attr.join(data, lsuffix='1', rsuffix='2')`
しかし、私は私のデータのほとんど全体のためのNaN値で羽目になる:
merged = pd.merge(attr, data, on='SSN', how='outer')
私はExcelのデータを見てきたし、私はそこに試合を見たとき、私は私のデータの約90%が持っている必要があることを知っています一致したSSN。私は自分のデータ型もチェックしました。どんな提案/アイデアや助けもありがとうございます。
EDIT:不思議な人のために、私は明らかにJoins/mergesを持っています。私はそれらを行う方法を知っています。私はこれを引き起こしているのかどうかはわかりませんが、何らかの理由で私の2つのデータフレームが、多くのSSNを共有していることを認識しません。内部結合を行うと、私のデータフレームは空です。 SSNの両方がオブジェクトであることを確認しました。 attr['SSN'] = attr['SSN'].astype(object)
EDIT:インポートした2つのデータフレームの印刷データ型は次のとおりです。
ATTR: RISK_SCOREのfloat64 ヘルスプランオブジェクト THL_STATUSオブジェクト ASSIGNED DATE /起因日付オブジェクト ADDRESSオブジェクト 電話番号が 保険のfloat64
LAST_NAMEオブジェクト FIRST_NAMEオブジェクト ALTRUISTA_ID PATIENT_DOBオブジェクト RISK_CATEGORY_NAMEオブジェクト INT64 ID float64 SSN int64 PROGRAM_NAME Sオブジェクト LAST_CLAIMのfloat64 LAST_VISIT_DATEのfloat64 NEXT_VISIT_DATEのfloat64 PCP_NAMEオブジェクト ER_VISITSのInt64 APP_VISITSのInt64 ADTDAYS_COUNTのInt64 DUE_DAYSのInt64 DTYPE:オブジェクト
データ: SSNオブジェクト CLIENTNAMEオブジェクト DTYPEのInt64
CLIENT_ID :オブジェクト
この時点で私はSSNをattrデータフレームから文字列にキャストする必要があります。私はこのためにattr['SSN'].apply(str)
を使用しています。 (私はattr['SSN'] = attr['SSN'].astype(object)
を使用していましたが、動作していませんでした。これは私の最初の問題だと思っています。)これを実行すると、データ型が変更されたことがわかります。今すぐ私のマージのため:merged = pd.merge(attr, data, on='SSN', how='outer')
。それは働いたように見えます!
'.join'は両方のデータフレームのインデックスにジョインし、' .merge'は指定されたカラムにジョインします。どうして 'how = 'inner''、デフォルトのarg? – Parfait