Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从dataframe矩阵打印标题值_Python_Pandas_Dataframe - Fatal编程技术网

在python中从dataframe矩阵打印标题值

在python中从dataframe矩阵打印标题值,python,pandas,dataframe,Python,Pandas,Dataframe,我通过pandas.dataframe获得了一个矩阵: tfidf = TfidfVectorizer() x = tfidf.fit_transform(corpus) df_tfidf = pd.DataFrame(x.toarray(),columns=tfidf.get_feature_names()) 它看起来像下面的矩阵: 我的矩阵有更多的列和行。它有7180行和10390列。是否有一种方法可以打印列的标题,其值是否大于0?有人这样想和:0.511859,文档:0.46,0.68

我通过pandas.dataframe获得了一个矩阵:

tfidf = TfidfVectorizer()
x = tfidf.fit_transform(corpus)
df_tfidf = pd.DataFrame(x.toarray(),columns=tfidf.get_feature_names())
它看起来像下面的矩阵:

我的矩阵有更多的列和行。它有7180行和10390列。是否有一种方法可以打印列的标题,其值是否大于0?有人这样想
和:0.511859,文档:0.46,0.68..

我试过用这种方法,但花了很多时间:

for col in df_tfidf.columns:
   for row in df_tfidf.index:
     if df_tfidf[col][row] > 0:
        print str(df_tfidf[col][row]) + ' ' + col.encode('utf8')
有没有办法更快地做到这一点

data = [[0.85, 0.0], [0.2, 0.7], [0.0, 14]] 
df = pd.DataFrame(data, columns = ['and', 'document']) 
output = df.apply(lambda x: list(x.dropna())).to_dict()

for k,v in output.items():
    print(f'{k}: {v}')
输出

and: [0.85, 0.2]
document: [0.7, 14.0]
您可以使用带numpy数组的布尔掩蔽来过滤
dict
comprehension中的正值:

r = {c: s[s > 0] for c, s in zip(df, df.T.to_numpy())}
编辑:
DataFrame.to_numpy()
在pandas版本>=
0.24
中可用,如果您使用的是低于
0.24
的pandas版本,请使用:

r = {c: s[s > 0] for c, s in zip(df, df.T.values)}
例如:

# Sample dataframe
       col0      col1      col2
0  0.392938 -0.427721 -0.546297
1  0.102630  0.438938 -0.153787
2  0.961528  0.369659 -0.038136
3 -0.215765 -0.313644  0.458099
4 -0.122856 -0.880644 -0.203911

# Result
{'col0': array([0.39293837, 0.10262954, 0.9615284 ]),
 'col1': array([0.43893794, 0.36965948]),
 'col2': array([0.45809941])}

您期望的输出是什么?我想迭代矩阵以获得单词及其tfidf值。但它是指每列的正数,对吗?你需要把这些值存储在字典里还是只想打印出来?是的,它们都是正值。我想把它保存在一种字典中
word:value
。我正在努力研究chrisI给出的答案,我尝试了你的方法,但我得到的
DataFrame'对象没有属性“to\u numpy”
@Lx2pwn你的熊猫版本是什么?如果低于
0.24
,则可以用
值替换
to_numpy()
。在Python2.7上为0.22.0
to_numpy()
是在pandas版本
0.24
中引入的。
尝试使用
它可以与r={c:s[s>0]完美配合使用,s在zip中(df,df.T.values)}使用数据帧矩阵7180 x 10390,在13秒内完成。您的方法有效。我需要以这种方式修改循环
for word,dict in output.items():for(dict,values)in dict.items():如果值>0:print str(values)+''+str(word.encode('utf8'))
它可以工作,但需要很多时间。8分钟