2016-04-12 4 views
1

Der Einfachheit halber wird angenommen, dass wir ein Datenframe mit einer einzelnen Spalte haben, die String-Werte enthält. Ich möchte eine zweite Spalte erstellen, die eine Ganzzahl enthält, die den ASCII-Wert für jedes Zeichen in der Zeichenfolge in einer verketteten Form darstellt. Siehe unten. Angenommen, Spalte A ist das, was wir haben, und Spalte B ist, was wir wollen.Pandas Dataframe String-Spalte zu verkettetem Int

Column_A Column_B 
    JJIIV 7474737386 
    OOEWW 7979698787 
    ZZXSW 9090888387 
    QLHMN 8176727778 
    WESDFG 876983687071 

Ok, also auf dem ersten Wert in Spalte A suche, JJIIV, wir kommen mit dem Ergebnis in Spalte B, indem Sie den folgenden 1) Bruch JJIIV da oben in 'J', 'J', 'I ',' Ich ',' V '. 2) Nimm das ord() jedes Charakters. ord ('J') == 74 usw. 3) verkette jeden der ord-Werte, um ein bigint zu erzeugen.

Bis jetzt konnte ich folgendes erreichen. Ich bin nur nicht sicher, wie Sie die zusätzliche Spalte im Datenrahmen erstellen und diese Logik auf jede Zeile anwenden.

import pandas as pd 

raw_data = {'string_column': ['JJIIV', 'OOEWW', 'ZZXSW', 'QLHMN', 'WESDFG']} 
df = pd.DataFrame(raw_data, columns = ['string_column']) 

for i in df['string_column']: 
    print([ord(c) for c in i]) 

Antwort

0

Sie appply mit einem lambda verwenden können, die Ordinalwerte zu verbinden, um eine Reihe von Werten zu erstellen: kann

In [114]:  
df['ord'] = df['string_column'].apply(lambda x: ''.join([str(ord(e)) for e in x])).astype(np.int64) 
df 

Out[114]: 
    string_column   ord 
0   JJIIV 7474737386 
1   OOEWW 7979698787 
2   ZZXSW 9090888387 
3   QLHMN 8176727778 
4  WESDFG 876983687071 

Sie werfen den int64dtype zu beachten, zu konvertieren, dass der letzte Eintrag gewonnen passen nicht in einen 32-Bit-Int