Python 如何从pandas.tolist()中删除最右边的None?
假设我导入Python 如何从pandas.tolist()中删除最右边的None?,python,pandas,list,numpy,Python,Pandas,List,Numpy,假设我导入xlsx文件以列出: 是否可以删除最右边的None,而不通过行循环?预期结果: [[nan, 1.0, 2.0], [nan, 3.0], [nan, 4.0, 5.0, 6.0], [nan, 7.0]] 基于NumPy的解决方案 要获取嵌套列表,请执行以下操作: list(map(list, res)) [[nan, 1.0, 2.0], [nan, 3.0], [nan, 4.0, 5.0, 6.0], [nan, 7.0]] 设置: import numpy as
xlsx
文件以列出:
是否可以删除最右边的None
,而不通过行循环?预期结果:
[[nan, 1.0, 2.0],
[nan, 3.0],
[nan, 4.0, 5.0, 6.0],
[nan, 7.0]]
基于NumPy的解决方案
要获取嵌套列表,请执行以下操作:
list(map(list, res))
[[nan, 1.0, 2.0], [nan, 3.0], [nan, 4.0, 5.0, 6.0], [nan, 7.0]]
设置:
import numpy as np
nan = np.nan
a = np.array([[nan, 1., 2., nan],
[nan, 3., nan, nan],
[nan, 4., 5., 6.],
[nan, 7., nan, nan]])
使用列表
没有任何明显或干净的东西。由于输出的行长度不均匀,只需迭代和截断即可。谢谢。我认为有一个
read\u excel
选项可以这样做。我得到一个错误,输入类型不支持ufunc'isnan…行m=np.cumsum(~np.isnan(a_rev),1)>=1
尝试使用pd.read\u excel(open('1.xlsx','rb'),index\u col=None,header=None,dtype=float)。value.tolist()
@F.Vosnim`第二次进近的计时速度似乎快了4倍@F.Vosnim,因此我建议在这里使用列表
list(map(list, res))
[[nan, 1.0, 2.0], [nan, 3.0], [nan, 4.0, 5.0, 6.0], [nan, 7.0]]
import numpy as np
nan = np.nan
a = np.array([[nan, 1., 2., nan],
[nan, 3., nan, nan],
[nan, 4., 5., 6.],
[nan, 7., nan, nan]])
l = [[nan, 1., 2., nan], [nan, 3., nan, nan],
[nan, 4., 5., 6.], [nan, 7., nan, nan]]
out = []
for i in l:
i_rev = i[::-1]
for ix, j in enumerate(i_rev):
if j == j:
out.append(i[:len(i)-ix])
break
out
# [[nan, 1.0, 2.0], [nan, 3.0], [nan, 4.0, 5.0, 6.0], [nan, 7.0]]