Tengo tres marcos de datos: marca de hora (con marcas de hora), dataSun (con marcas de hora de amanecer y anochecer), dataData (con diferentes datos de clima). La timestamp
dataframe tiene el tipo de datos "int64"
.
timestamp.head() timestamp 0 1521681600000 1 1521681900000 2 1521682200000 3 1521682500000 4 1521682800000
Dataframe dataSun
también tiene el tipo de datos "int64"
.
dataSun.head() sunrise sunset 0 1521696105000 1521740761000 1 1521696105000 1521740761000 2 1521696105000 1521740761000 3 1521696105000 1521740761000 4 1521696105000 1521740761000
Marco de datos con datos de datos climáticos dataData
tiene el tipo de datos "float64"
.
dataData.head() temperature pressure humidity 0 2.490000 1018.000000 99.0 1 2.408333 1017.833333 99.0 2 2.326667 1017.666667 99.0 3 2.245000 1017.500000 99.0 4 2.163333 1017.333333 99.0 5 2.081667 1017.166667 99.0
Quiero concatenar estos tres marcos de datos en uno.
dataResult = pd.concat((timestamp, dataSun, dataData), axis = 1) dataResult.head() timestamp sunrise sunset temperature pressure 0 1521681600000 1.521696e+12 1.521741e+12 2.490000 1018.000000 1 1521681900000 1.521696e+12 1.521741e+12 2.408333 1017.833333 2 1521682200000 1.521696e+12 1.521741e+12 2.326667 1017.666667 3 1521682500000 1.521696e+12 1.521741e+12 2.245000 1017.500000 4 1521682800000 1.521696e+12 1.521741e+12 2.163333 1017.333333 5 1521683100000 1.521696e+12 1.521741e+12 2.081667 1017.166667 weatherMeasurements.info() RangeIndex: 7188 entries, 0 to 7187 Data columns (total 6 columns): timestamp 7188 non-null int64 sunrise 7176 non-null float64 sunset 7176 non-null float64 temperature 7176 non-null float64 pressure 7176 non-null float64 humidity 7176 non-null float64 dtypes: float64(5), int64(1)
¿Por qué pd.concat
ha pd.concat
el tipo de datos de los valores DataSun
? He intentado diferentes maneras de concatenar los marcos de datos. Por ejemplo, concatené solo timestamp
y dataSun
en un dataframe, luego concatené el marco de dataData
resultante con dataData
. Pero fue el mismo resultado. ¿Cómo puedo concatenar tres marcos de datos y asegurar los tipos de datos?
Debido a esto –
timestamp 7188 non-null int64 sunrise 7176 non-null float64 ...
timestamp
tiene 7188 valores no nulos, mientras que sunrise
y en adelante tienen 7176. No hace falta decir que hay 12 valores que no son nulos … lo que significa que son NaNs.
Dado que los NaN son de dtype=float
, todos los demás valores de esa columna se actualizan automáticamente para flotar, y los números flotantes tan grandes generalmente se representan en notación científica.
Ese es el porqué , pero eso realmente no resuelve tu problema. Sus opciones en este punto son
dropna
fillna
(Ahora puedes bajar estas filas a int.)
Alternativamente, si realiza pd.concat
con join='inner'
, los NaN no se introducen y los tipos se conservan.
pd.concat((timestamp, dataSun, dataData), axis=1, join='inner') timestamp sunrise sunset temperature pressure \ 0 1521681600000 1521696105000 1521740761000 2.490000 1018.000000 1 1521681900000 1521696105000 1521740761000 2.408333 1017.833333 2 1521682200000 1521696105000 1521740761000 2.326667 1017.666667 3 1521682500000 1521696105000 1521740761000 2.245000 1017.500000 4 1521682800000 1521696105000 1521740761000 2.163333 1017.333333 humidity 0 99.0 1 99.0 2 99.0 3 99.0 4 99.0
Con la opción 3, se realiza una unión interna en los índices de cada dataframe.