我有三个数据框:时间戳(带有时间戳),dataSun(带有日出和日落的时间戳),dataData(带有不同的气候数据)。数据框timestamp
具有数据类型"int64"
。timestamp.head() timestamp0 15216816000001 15216819000002 15216822000003 15216825000004 1521682800000
数据框dataSun
也具有数据类型"int64"
。
dataSun.head()
sunrise sunset
0 1521696105000 1521740761000
1 1521696105000 1521740761000
2 1521696105000 1521740761000
3 1521696105000 1521740761000
4 1521696105000 1521740761000
气候数据为
dataData
的数据框的数据类型为"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
我想将这三个数据帧合并为一个。
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()
<class 'pandas.core.frame.DataFrame'>
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)
为什么
pd.concat
更改了值DataSun
的数据类型?我尝试了各种方法来串联数据帧。例如,我只在一个数据框中连接了timestamp
和dataSun
,然后又将我的结果数据框与dataData
连接了。但这是相同的结果。如何连接三个数据帧并保护数据类型?
最佳答案
因为这 -
timestamp 7188 non-null int64
sunrise 7176 non-null float64
...
timestamp
具有7188个非空值,而sunrise
及之后的具有7176个值。不言而喻,有12个非非null值……意味着它们是NaN。由于NaN的值是
dtype=float
,因此该列中的所有其他值都会自动转换为浮点数,并且通常以科学计数法表示较大的浮点数。这就是原因,但这并不能真正解决您的问题。此时您的选择是
使用
dropna
用NaN删除那些行使用
fillna
用默认的整数值填充这些NaN(现在,您可以将这些行转换为整数。)
或者,如果对
pd.concat
执行join='inner'
,则不会引入NaN并保留dtype。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
使用选项3,将对每个数据帧的索引执行内部联接。
关于python - 为什么pd.concat将结果数据类型从int更改为float?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49940511/