Mam duży .txt z danymi w złych formatach. Chciałbym usunąć niektóre wiersze i przekonwertować pozostałe dane na liczby zmiennoprzecinkowe. Chciałbym usunąć wiersze z 'X'
lub 'XX'
, reszta należy przekonwertować do pływaka, numer jak 4;00.1
powinny być zamienione na 4.001
Plik wygląda tej próbki:usuwanie określonych wierszy z DataFrame w pandach Pythona
0,1,10/09/2012,3:01,4;09.1,5,6,7,8,9,10,11
1,-0.581586,11/09/2012,-1:93,0;20.3,739705,,0.892921,5,,6,7
2,XX,10/09/2012,3:04,4;76.0,0.183095,-0.057214,-0.504856,NaN,0.183095,12
3,-0.256051,10/09/2012,9:65,1;54.9,483293,0.504967,0.074442,-1.716287,7,0.504967,0.504967
4,-0.728092,11/09/2012,0:78,1;53.4,232247,4.556,0.328062,1.382914,NaN,4.556,4
5,4,11/09/2012,NaN,NaN,6.0008,NaN,NaN,NaN,6.000800,6.000000,6.000800
6,X,11/09/2012,X,X,5,X,8,2,1,17.000000,33.000000
7,,11/09/2012,,,,,,6.000000,5.000000,2.000000,2.000000
8,4,11/09/2012,7:98,3;04.5,5,6,3,7.000000,3.000000,3.000000,2
9,6,11/09/2012,2:21,4;67.2,5,2,2,7,3,8.000000,4.000000
czytałem go DataFrame i wyboru wierszy
from pandas import *
from csv import *
fileName = '~/data.txt'
colName = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
df = DataFrame(read_csv(fileName, names=colName))
print df[df['b'].isin(['X','XX',None,'NaN'])].to_string()
wyjście z ostatniej ostatniej linii daje mi tylko:
>>> print df[df['b'].isin(['X','XX',None,'NaN'])].to_string()
b c d e f g h i j k l
a
2 XX 10/09/2012 3:04 4;76.0 0.183095 -0.057214 -0.504856 NaN 0.183095 12 NaN
6 X 11/09/2012 X X 5.000000 X 8.000000 2 1.000000 17 33
nie działa odbierz wiersz 7 i chciałbym przejść przez całą df nie tylko jedną kolumnę (oryginalny plik jest bardzo duży).
W chwili konwersji używam jak poniżej, ale najpierw trzeba usunąć niechciane wiersze, aby zastosować ją do wszystkich plików df.
convert1 = lambda x : x.replace('.', '')
convert2 = lambda x : float(x.replace(';', '.'))
newNumber = convert2(convert1(df['e'][0]))
Po wyborze wiersze chciałbym, aby usunąć je z df, staram df.pop()
ale działa tylko dla kolumny nie dla wierszy. Próbuję nazwać rzędy, ale nie mam szczęścia. W tym konkretnym txt powinienem zakończyć z nowym df z wierszy [0,3,8,9] z kolumną "c" jako formatem daty, "d" jako format czasu, a resztą jako zmienną. Próbuję to rozgryźć od dłuższego czasu, ale nie wiem, gdzie się poruszać, czy to możliwe w pandach (prawdopodobnie powinno być) czy muszę zmienić na ndarray
czy cokolwiek innego? Dzięki za twoją radę
Ponieważ jestem nowego użytkownika, chciałbym wiedzieć, co jest nie tak z tym pytaniem, że jest przegłosowany? – tomasz74