Tengo un .txt grande con datos en formatos incorrectos. Me gustaría eliminar algunas filas y convertir el resto de los datos en números flotantes. Me gustaría eliminar filas con 'X'
o 'XX'
, El resto lo debe convertir a flotar, igual número 4;00.1
se deben convertir a 4.001
El archivo se ve como este ejemplo:eliminando filas particulares de DataFrame en python pandas
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
lo leí a trama de datos y elegir filas
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()
Una salida de la última última línea me da solamente:
>>> 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
nO recoger la fila 7, y me gustaría revisar toda la columna no solo una (el archivo original es muy grande).
En este momento para la conversión lo uso como a continuación, pero primero necesito eliminar las filas no deseadas para aplicarlo a todos los df.
convert1 = lambda x : x.replace('.', '')
convert2 = lambda x : float(x.replace(';', '.'))
newNumber = convert2(convert1(df['e'][0]))
Después de seleccionar las filas que me gustaría sacarlos de df, trato df.pop()
pero funciona sólo para la columna no para las filas. Intento nombrar las filas, pero no la suerte. En este particular .txt debería terminar con un nuevo df de las filas [0,3,8,9] con la columna 'c' como formato de fecha, 'd' como formato de tiempo y el resto como float. Intento averiguarlo desde hace bastante tiempo, pero no sé dónde moverme, ¿es posible en pandas (probablemente debería estarlo) o debo cambiar a ndarray
o cualquier otra cosa? Gracias por su consejo
Como soy un usuario nuevo, me gustaría saber qué está mal con esta pregunta que está abajo votada? – tomasz74