2016-11-06 3 views
0

in Python zu Datenrahmen, wie eine Zeichenfolge wiePython: convert string [('a', 0,2), ('b', 0,9), ('a', 0,4)]

thisStr = '[('a', 0.332), ('d', 0.43766), ('b', 0.3244), ('b', 0.76577), ('a', 0.863), ('d', 0.96789)]' 

konvertieren in einen Datenrahmen so etwas wie

index item  value 
0  a  0.332 
1  d  0.43766 
2  b  0.3244 
3  b  0.76577 
4  a  0.863 
5  d  0.96789 
+1

Es ist eine Liste von Tupeln ... – Li357

+0

Ihr Text abd drehen, wird es an anderer Stelle als eine andere Zeichenfolge var definieren oder es sollte ‚sein, "b" und "d", z. (a, 0,332)? – Skycc

+0

danke für kommentare, ive machte ein update um es klarer zu machen was ich versuche –

Antwort

1

Es klingt wie Sie die Zeichenfolge in eine Pandas Datenrahmen zu ändern, und dann tun einige Manipulationen suchen. Ich würde die Zeichenfolge durch einfaches Ersetzen und manuelles Bearbeiten am Anfang und Ende der Zeichenfolge wie folgt ändern. Sie umgehen die Interpunktion mit Ausnahme der Endpunkte, sodass Sie die Funktion eval() anwenden können.

import pandas as pd 

thisStr = eval('[(\'a\', 0.332), (\'d\', 0.43766), (\'b\', 0.3244), (\'b\', 0.76577), (\'a\', 0.863), (\'d\', 0.96789)]') 

df = pd.DataFrame(thisStr) 
df.rename(columns={0:'item', 1:'value'}, inplace=True) 

# one approach to solving the problem of removing rows where 
# item a has values less than 0.8. 
mask = (df['item'] == 'a') & (df['value'] < 0.8) 
df2 = df[~mask] 
1

Mit eval-Funktion die Zeichenfolge in Liste von Tupeln

# change to double quote " because contains single quote within string 
thisStr = "[('a', 0.332), ('d', 0.43766), ('b', 0.3244), ('b', 0.76577), ('a', 0.863), ('d', 0.96789)]" 

# this turn the string into list of tuples 
mylist = eval(thisStr) 
# mylist[0][0] access 1st row item which is 'a' 
# mylist[0][1] access 1st row value which is 0.332 

# to remove all row 'a' less than 0.8 
newlist = [i for i in mylist if not (i[0]=='a' and i[1] < 0.8)] 
Verwandte Themen