如何解决从Excel读取时,熊猫会将整数转换为实数
我最近开始探索用于分析Excel数据的python。 我有一个带有两个工作表的excel文件,每个工作表都有一个矩阵(m = 1000行和n = 999列)。两个矩阵的元素相互关联:其中一个矩阵关注置换值,另一个矩阵关注对应于每个位移的力值。位移和相应的力是从m = 1000数值模拟和n = 999增量获得的。是否可以识别仅与整数位移值相对应的力值?或者,是否可以将位移矩阵中的所有十进制数字替换为0?我试图将excel文件读入Pandas数据框中,但是位移矩阵中的所有值似乎都显示为“实数”(例如,来自excel的数字“ 1”,“ 2”,“ 3”等都显示为浮点在python中为“ 1。”,“ 2。”,“ 3。”)。 谢谢您的关注。
解决方法
让我们以较小的规模( 3 * 3 )为例。
我准备了一个有2张纸的Excel文件并阅读:
displ = pd.read_excel('Input_2.xlsx','Displ')
forces = pd.read_excel('Input_2.xlsx','Forces')
两个DataFrame都包含:
displ forces
C1 C2 C3 C1 C2 C3
0 10.0 12.1 11.3 0 120.1 130.2 140.3
1 12.5 13.0 13.5 1 150.4 160.5 170.6
2 12.6 13.6 13.8 2 180.7 190.8 200.9
识别包含整数的 dis 元素 (实际上,仍然是 float 数字,但小数 零件== 0.0 ),则可以运行:
displ.mod(1.0) == 0.0
您将获得:
C1 C2 C3
0 True False False
1 False True False
2 False False False
并获取相应的 force 值和 NaN 对于其他值,可以运行:
forces.where(displ.mod(1.0) == 0.0)
获取:
C1 C2 C3
0 120.1 NaN NaN
1 NaN 160.5 NaN
2 NaN NaN NaN
另一个选择是获取 displ 中的索引列表,其中 相应元素的分数部分为零。 实际上,它是一个 Numpy 函数,因此它可以在 基础 Numpy 数组并返回整数(从零开始) 索引:
ind = np.nonzero((displ.mod(1.0) == 0.0).values)
结果是:
(array([0,1],dtype=int64),array([0,dtype=int64))
所以它是索引的 2元组:
- 行索引,
- 列索引。
您还可以从中检索指定元素的列表 forces ,实际上也来自底层的 Numpy 数组, 正在运行:
forces.values[ind]
结果是:
array([120.1,160.5])
要将 displ 的“整数”元素替换为零,您可以 可以运行:
displ.mask(displ.mod(1.0) == 0.0,inplace=True)
现在 displ 包含:
C1 C2 C3
0 0.0 12.1 11.3
1 12.5 0.0 13.5
2 12.6 13.6 13.8
请注意,“所需”元素仍为浮动零, 但这是 Pandas 的功能,每一列都有一个 类型,以适合此列中的所有元素(在本例中为 float )。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。