for循环在python中创建矩阵

2024-09-28 20:57:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图研究数据中有一个零值的概率,我开发了一个代码,当另一列数据为零时,输出一列数据的值,这正是我需要的。但是,对于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')

问题在于,由于某种原因,循环可以正确地穿过这些线:

^{pr2}$

但对于第二种情况,它重复n=6的值:

(dfallchan[n]==0)

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

您可以看到代码循环正确,因为输出数据帧有n=29列,但对于上面指定的条件则不是。在

请帮忙,谢谢!在


Tags: csvto数据代码importdataframeforas
2条回答

终于拿到了!在

这个代码正是我想要的!在

# In[9]:

import numpy as np
import pandas as pd


# In[10]:

allchan = pd.read_csv('allchan.csv',delimiter = ' ')


# In[11]:

allchanarray = np.array(allchan)


# In[12]:

dfallchan = pd.DataFrame(allchanarray,range(1,578),dtype=float)


# In[13]:

v = pd.DataFrame(columns=range(0,29))
y = pd.DataFrame()
k = pd.DataFrame(columns=range(0,29))


# In[14]:

for n in range(0,29):
    x = dfallchan[(dfallchan[0]>0) & (dfallchan[n]==0)][0]
    y = y.append(x)
    v = y.transpose()
    k = v.count()


# In[15]:

v.columns=range(0,29)
k = k.values.reshape(1,29)


# In[16]:

v.to_excel("Chan1-OthersZeroVals.xlsx", index=False)
pd.DataFrame(k).to_excel("Chan1-OtherZeroCount.xlsx", index=False)

这样会更有效率。在

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()

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

相关问题 更多 >