2017-10-17 1 views
0

Bonjour Je souhaite fusionner deux fichiers de données que je charge dans Excel. Je convertis la colonne qui devrait être fusionnée en "str". Suprsingly le code fusionne la première rangée mais renvoie des valeurs NaN .... Le code j'utilise est:Fusionner renvoie NaN sauf pour la première ligne

ListA=pd.read_excel(inpath,sheetname="Tabelle2") 
ListA["Stücklistenkomponente"]=ListA["Material"].astype(np.str) 
ListB=pd.read_excel(inpath,sheetname="Tabelle1") 
ListB["Stücklistenkomponente"]=ListB["Material"].astype(np.str) 
print(ListA.dtypes) 
print(ListB.dtypes) 

objet matériel

objet Matériau

La forme de la deux bases de données est:

ListA

Material 
R 22B 2.0 7.72 11.0 Lo 
X 127 1.5x4.64x4[G16.05.01] CL 
L 431 2x6,96x5.5 Y 
9999 
L 431 2x5,96x5.5 p 
F 631 2x6,96x5.5 a 
N 431 2x6,96x5.5 v 
J 431 2x6,96x5.5 
O 431 2x6,96x5.5 
VM 431 2x6,96x5.5 L 

Liste_B

Material       InnerDiameter OuterDiameter Length 
    R 22B 2.0 7.72 11.0 Lo   2    6    8 
    X 127 1.5x4.64x4[G16.05.01] CL 2    7    12 
    L 431 2x6,96x5.5 Y    5    8    13 
    9999        0    0    0 
    L 431 2x5,96x5.5 p    6    9    15 
    F 631 2x6,96x5.5 a    8    5    26 
    N 431 2x6,96x5.5 v    9    1    3  
    J 431 2x6,96x5.5     12    6    89 
    O 431 2x6,96x5.5     5    4    12 
    VM 431 2x6,96x5.5 L    4    12    7 

Il retourne:

  Material  InnerDiameter OuterDiameter Lenth 
      R 22B 2.0 7.72 11.0 Lo 2     6  8 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 
        NaN    NaN    NaN NaN 

Alors qu'est-ce que je fais mal? Je pense que la solution est de convertir les deux colonnes en chaîne dtype mais cela ne fonctionne pas ....

Appréciez toute aide!

Répondre

0

Je pense qu'il doit y avoir des données différentes, peut-être traling witespaces, parce que .astype(str) convertir correctement les données à string s.

Si les données sont string s, dict s, set s, list s alors dtype est object.

Mais type est string, dict ...

Vous pouvez le vérifier par:

print(ListA["Stücklistenkomponente"].apply(type)) 

Pour les données de contrôle mieux aider à générer quelque temps lists:

print(ListA["Stücklistenkomponente"].tolist()) 
print(ListB["Stücklistenkomponente"].tolist()) 

EDIT:

Je teste vos données et le résultat est vraiment intéressant:

df1 = pd.read_excel('Mappe3.xlsx',sheetname="Tabelle2") 
df2 = pd.read_excel('Mappe3.xlsx',sheetname="Tabelle1") 

#default inner join - get duplicated rows, because duplicate values 
#on should be omit if only one same column for join 
df = pd.merge(df1, df2) 
print (df.head(10)) 
        Stücklistenkomponente Ritzel_Materialnummer \ 
0 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
1 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
2 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
3 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
4 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
5 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
6 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
7 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
8 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
9 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
... 
... 

#remove duplicates in both df 
df1 = df1.drop_duplicates('Stücklistenkomponente') 
df2 = df2.drop_duplicates('Stücklistenkomponente') 

#default inner join - only 5 same categories 
df = pd.merge(df1, df2) 
print (df) 
        Stücklistenkomponente Ritzel_Materialnummer \ 
0 RITZEL 22F 2.0 7.72 11.0 Z17 SCHWEISS   401.4425.13 
1 RITZEL 22F 3.0 7.72 11.0 Z17 SCHWEISS   401.4425.15 
2  RITZEL 22F 3.0 7.9 6.0 Z17 PRESS   401.4425.11 
3  RITZEL 22F 3.0 6.0 15.0 PRESS Z8   401.4487.01 
4  RITZEL 22F 4.0 7.9 6.0 Z17 PRESS   401.4425.14 

    Innendurchmesser Außendurchmesser Länge   Material1 Material2 \ 
0    2    7.72 11.0   X46Cr13   - 
1    3    7.72 11.0   X46Cr13   - 
2    4    7.90 6.0 42CrMo4 vergütet   - 
3    3    6.00 15.0 42CrMo4 vergütet   - 
4    2    7.90 6.0 42CrMo4 vergütet   - 

    Material3 
0   - 
1   - 
2   - 
3   - 
4   - 
+0

Malheureusement, les données sont les mêmes et vérifier aussi les dtypes ne révèle aucune différence .... aucune idée – 2Obe

+0

De plus, pourquoi il fonctionne pour la première ligne, mais s'arrête – 2Obe

+0

Données sont même colonne sage? Que renvoie 'print (ListA [" Stücklistenkomponente "] == ListB [" Stücklistenkomponente "])'? – jezrael