for循环在python中创建一个矩阵

时间:2017-08-08 16:29:54

标签: python arrays for-loop dataframe

我正在尝试研究在我的数据中具有零值的概率,并且我已经开发了一个代码,当另一个为零时输出一列数据的值,这是我需要的。但是我必须为每个列与我的577by29数据帧中的所有其他28个数据框执行此操作很困难所以我决定创建一个for循环来为我执行此操作:

import numpy as np
import pandas as pd
allchan = pd.read_csv('allchan.csv',delimiter = ' ')
allchanarray = np.array(allchan)
dfallchan = pd.DataFrame(allchanarray,range(1,578),dtype=float)
y = pd.DataFrame()
x = pd.DataFrame()
for n in range(0,29):
    x[n] = dfallchan[(dfallchan[0]>0) & (dfallchan[n]==0)][0]
    y[n] = x[n].count()
x.to_excel('n.xlsx', index=False, sheet_name='ValForOtherZero')
y.to_excel('v.xlsx', index=False, sheet_name='CountOfZeroVlas')

问题是循环由于某种原因正确地通过这些行:

 x[n] = dfallchan[(dfallchan[0]>0) & (dfallchan[n]==0)][0]
 y[n] = x[n].count()

但是对于第二个条件它重复n = 6的值:

(dfallchan[n]==0)

代码的输出应返回第一个通道的不同值,因为零在我的输入文件中随机分布,但我的输出对于数据是正确的,直到第6列 - 我的列(0-5)应该是空的 - 它重复所有其他列的输出! 输出: output 1

你可以看到代码循环正确,因为输出数据框有n = 29列但不适用于上面指定的条件。

请帮忙,谢谢!

2 个答案:

答案 0 :(得分:0)

终于明白了!

这段代码完全符合我的要求!

BeanExpressionContext

答案 1 :(得分:0)

这会更有效率。

all_values = []
for n in range(0,29):
    condition = (dfallchan[0]>0) & (dfallchan[n]==0)
    count = condition.sum()
    vals = dfallchan[condition][0].values
    all_values.append(vals)

all_values_df = pd.DataFrame(all_values).transpose()

在这里,我首先创建一个列表列表并将所有值附加到它。然后在最后我创建数据帧并转置它。