python - pandas concat 用 NaN 填充非对齐索引

标签 python pandas

问题

我连接了两个类型为 int 的系列,而我返回的数据帧是 float 类型。发生这种情况是因为系列的索引未对齐,并且当发生连接时,pandas 会用 NaN 填充空白。然而,NaN 被认为是一个 float ,不幸的是将我所有的整数都转换为 float 。

问题

我的问题是,如何用其他不会将我的整数转换为 float 的东西来填补空白?

MCV

import pandas as pd

s1 = pd.Series([1], index=['A'])
s2 = pd.Series([1], index=['B'])

print "s1 type: {} | s2 type: {}\n".format(s1.dtype, s2.dtype)

df = pd.concat([s1, s2], axis=1)
print df, "\n"
print df.dtypes

打印:

s1 type: int64 | s2 type: int64

     0    1
A  1.0  NaN
B  NaN  1.0 

0    float64
1    float64
dtype: object

最佳答案

首先,dtype 转换是由于 NaN 不能用整数表示,因此选择了 float dtype。

其次,这将成为个人选择,当发生这种情况时该怎么做,这取决于您,没有正确的选择。

例如,我们可以将 fillna 与任意值一起使用,例如 0-1 然后我们可以使用astype(int):

In [21]:
df.fillna(0).astype(int)

Out[21]:
   0  1
A  1  0
B  0  1

但这可能不是您想要的,您可能决定使用 dropna 删除这些行,但这可能意味着您丢失了有值(value)的信息,如果您正在进行某种机器学习,这些信息可能是至关重要的或其他分析。

因此您可能决定要将这些列/行设置为最小值/最大值/平均值或中值,但如果列值依赖于其他列,这可能会产生严重后果,例如我们设置所有缺失值到最小值/最大值,但随后该值会使预测模型产生偏差,因为它会丢失 entropy/information因为如果您有大量缺失值,那么您的数据就会偏向于最小值/最大值。就我个人而言,在这些情况下我觉得工作正常。

关于python - pandas concat 用 NaN 填充非对齐索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360929/

相关文章:

python - 使用 --onefile 选项在 PyInstaller 上捆绑 CEFpython

python - 在 Python 中创建富文本文件 (rtf)

python - 根据与其他分组变量匹配的其他单元格的总和更新单元格中的值

python - pandas和python中特殊条件下将dataframe中的数据转换为列表

python - Flutter web 中的 HTTP 触发 Cloud Function

python - 使用 Python 连接 MySQL 数据库时出错

python - 在数据帧字典上生成平均值

python - pyspark:计算列表中不同元素的出现次数

python - 将每个单元格中具有 1D 数组的 2 个数据帧合并为每个单元格中具有 2D 数组的 1 个数据帧的最快操作

python - 删除后面没有其他 pd.Series 中的索引的索引