python - Python:从数据框中的对角线值创建列表
问题描述
我正在尝试在 Python 中创建一个例程来收集df
. 这是我要实现的目标的可重现示例:
data = {'column1':[1,1, 2, 3,6, 4,5,6], 'column2':[np.nan,4,3,5,6,2,3,4], 'column3':[np.nan,np.nan,3,2,5,np.nan,8,4], 'column4':[np.nan,np.nan,np.nan,3,6,np.nan,np.nan, 6], 'column5':[np.nan, np.nan, np.nan, np.nan, 8, np.nan, np.nan,np.nan]}
df = pd.DataFrame(data, columns = ['column1', 'column2', 'column3', 'column4', 'column5'])
my_list = []
# dict_list = {'list' + str(i):[] for i in list(range(len(df)))}
for i in range(len(df)):
for j in range(len(df.columns)):
if (i + j) < df.iloc[6,2]:
my_list.append(df.iloc[i + j, j])
else:
break
此代码返回一个列表:
my_list = [1,4.0,3.0,3.0,8.0,1,3.0,2.0,6.0,nan,2,5.0,5.0,nan,nan,3,6.0,nan,nan,nan,6,2.0,8.0,6.0,4,3.0,40,5,4.0,6]
并且基于给定的结构,df
我想要实现的是:
dict_list = [[1,4,3,3,8],[1,3,2,6],[2,5,5],[3,6],[6,2,8,6],[4,3,4],[5,4],[6]]
从我所见,我可以通过创建列表列表来做到这一点(在代码中注释为dict_list
,这是参考:Python:创建多个列表),但我无法将我的数据放在dict_list
object.
我将不胜感激任何帮助或指导。
谢谢!
解决方案
使用numpy.diag()
将帮助你
这是我使用的代码:
import pandas as pd
import numpy as np
data = {'column1':[1,1, 2, 3,6, 4,5,6], 'column2':[np.nan,4,3,5,6,2,3,4], 'column3':[np.nan,np.nan,3,2,5,np.nan,8,4], 'column4':[np.nan,np.nan,np.nan,3,6,np.nan,np.nan, 6], 'column5':[np.nan, np.nan, np.nan, np.nan, 8, np.nan, np.nan,np.nan]}
df = pd.DataFrame(data, columns = ['column1', 'column2', 'column3', 'column4', 'column5'])
nump=df.to_numpy()
my_list = []
for i in range(len(nump)):
my_list.append(np.diag(nump,k=-(i)))
输出:
[array([1., 4., 3., 3., 8.]),
array([ 1., 3., 2., 6., nan]),
array([ 2., 5., 5., nan, nan]),
array([ 3., 6., nan, nan, nan]),
array([6., 2., 8., 6.]),
array([4., 3., 4.]),
array([5., 4.]),
array([6.])]
要清理nan
值:
cleanedList=[]
for i in range(len(my_list)):
l=[x for x in my_list[i] if str(x) != 'nan']
print(l)
cleanedList.append(l)
输出:
[[1.0, 4.0, 3.0, 3.0, 8.0],
[1.0, 3.0, 2.0, 6.0],
[2.0, 5.0, 5.0],
[3.0, 6.0],
[6.0, 2.0, 8.0, 6.0],
[4.0, 3.0, 4.0],
[5.0, 4.0],
[6.0]]
有关如何使用numpy.diag()
的更多信息,请访问文档numpy.diag
推荐阅读
- python - 有没有办法访问第三个标签链接文本或单击带有 selenium python 的链接?
- laravel - Auth::user() 在 API 控制器中返回 Null
- javascript - 修复 WordPress api 上传测试失败的错误
- tailwind-css - class="hidden sm:flex" 在 TailwindCSS 中不起作用
- sparql - 有没有办法向 RDF 三元组添加额外的信息?
- php - 在购物车和结帐页面上显示特定类别的最小重量和剩余重量消息 - WooCommerce
- node.js - 为什么即使在节点服务器和 mongodb 加载后 localhost 也没有加载?
- javascript - 如何使我的滑块具有响应高度
- angular - 从 ngx-image-cropper 返回文件以上传 - Angular
- swift - 从函数返回闭包——(期望 2 个参数,但 1 在闭包体中使用)