遍历数据库列并提取特定值

时间:2019-07-16 11:36:09

标签: python dataframe

我有以下df,并希望提取以下标记的值:

  0          0       0        
*141,902*    0       0       
  0          0       0      
  0         *140,927*0      
  0          0       0          
 114,2      150,213 *152,20*    
  0          0      *152,20*        
  0        139,682   0      

更多说明:获取每列的前两个零之间的值。

i=0
for key,value in df_specific.iteritems():
    if value[i]==0:
        i +=1
        if value[i]!=0:
            print(value[i])
            i += 1
            if value[i] == 0:
                break
                df_specific.index += 1
上面的

我的代码有效,但仅适用于第一列(不确定原因),因此仅给出了第一个值: 141,9028 。 我相信,我只需要一种直接移至下一篇专栏的方法。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试一下:

for key,values in df_specific.iteritems():
    f = 0
    ff = 0
    for value in list(values):
        if value!=0 and f==0:
            print(value)
            ff = 1
        if value == 0 and ff == 1:
            break

答案 1 :(得分:0)

尝试一下:

import pandas as pd
df = pd.DataFrame({"A":[1, 0, 0.5, 1, 0, 1], "B":[0, 1, 2, 3, 0, 1]})
df_ = (df == 0).cumsum() == 1
result = [df.loc[df_[col], col].values[1:] for col in df_.columns]
print(result)
# [array([0.5, 1. ]), array([1, 2, 3])]

如果没有找到解决方案的列,此代码将产生错误,如果可能发生,您可以尝试:

import pandas as pd
df = pd.DataFrame({"A":[1, 0, 0.5, 1, 0, 1], "B":[0, 1, 2, 3, 0, 1]})
df_ = (df == 0).cumsum() == 1
result = [df.loc[df_[col], col].values[1:] 
          if df.loc[df_[col], col].size 
          else np.array([]) 
          for col in df_.columns if len(df.loc[df_[col], col].values)]
print(result)
# [array([0.5, 1. ]), array([1, 2, 3])]

如果要将结果合并到一个向量中,可以执行以下操作:

from itertools import chain 
res = [*chain.from_iterable(result),]
print(res)
# [0.5, 1.0, 1, 2, 3]

res = [x for for l in result x in l ]
print(res)
# [0.5, 1.0, 1, 2, 3]