【发布时间】:2020-08-10 19:19:19
【问题描述】:
我有一个 pandas 数据框,其中包含名为“t”和“y”的两列,其中包含浮点数。 't' 列包含从 0 到 200(包括)以 0.1 为增量的数字。我的目标是对 t 为 0 到 200(含)之间的 integer 的数据框的行进行子集化。我这样做的尝试产生了奇怪的结果。你可以从 Github here 找到我使用的数据来重现我的结果。
旁注:我为链接数据道歉,但奇怪的是我无法通过使用 numpy.arange 生成两组任意值来重现我得到的结果(增加了我的困惑......)。
这是我的代码:
import pandas as pd
import numpy as np
data = pd.ExcelFile(r'C:\Users\Leonidas\Documents\sample_data.xlsx')
data = data.parse(sheet_name = "Sheet1")
df = pd.DataFrame(data)
df.columns = ['t','y']
nums = np.arange(0,201)
df2 = df.loc[df['t'].isin(nums)]
print(df2)
这是我得到的输出:
t y
0 0.0 1.000000
20 2.0 0.999710
30 3.0 0.999576
40 4.0 0.999446
190 19.0 0.997854
200 20.0 0.997768
210 21.0 0.997684
220 22.0 0.997602
230 23.0 0.997521
240 24.0 0.997443
250 25.0 0.997367
740 74.0 0.995241
750 75.0 0.995219
此代码已对 t = 0,2,3,4,19,20,21,...,25,74,75 的行进行了子集化。 (???)我期待有 t = 0,1,2,3,...,200 的行。我很困惑为什么我想要的行中只有少数(似乎是随机的)选择被子集化...任何见解/帮助将不胜感激!
【问题讨论】:
-
isin仅适用于确切的事件。在您的文件中,t 列中似乎有很多小数,例如 199.999999999992(在 Excel 中显示为 200) -
啊,这一定是问题的原因!有没有办法在比较一组值时引入容差? (即子集 t 在 np.arange(0,201) 中某个数字的 10e-4 范围内的所有行?
-
您可以在检查
isin之前将列四舍五入
标签: python pandas dataframe subset rows