从Pandas(Python)对象中提取数值

时间:2017-03-16 11:02:12

标签: python list pandas

我使用一些数据库并使用Pandas进行分析。以下条目应该是数组,但Pandas会将它们视为对象。如何将每一行(条目)转换为数组或数字列表?

我的任务是计算此列中出现的零[0]'的数量(应为6)。

df['q3']
Out[26]: 
7838        [1, 2, 3]
7790              [0]
7853     [1, 2, 3, 4]
7889           [1, 2]
7928        [1, 2, 3]
7847              [1]
7884              [1]
7826              [1]
22101             [1]
7784              [1]
7795              [1]
7743        [1, 3, 4]
7878     [1, 2, 3, 4]
7761              [0]
7771           [1, 3]
7901           [1, 3]
7873     [3, 2, 1, 4]
8424              [1]
7887              [0]
7969           [1, 2]
8020              [0]
7895              [0]
7834        [1, 2, 3]
7947              [1]
7822        [2, 3, 4]
7970              [0]
8124              [1]
7916           [1, 2]
Name: q3, dtype: object


In [27]: df['q3'].values
Out[27]: 
array([[u'1', u'2', u'3'], [u'0'], [u'1', u'2', u'3', u'4'], ..., [u'0'],
       [u'1'], [u'1', u'2']], dtype=object)

UPD 为何选择downvote?这个问题有什么问题???

3 个答案:

答案 0 :(得分:1)

似乎你可以使用:

from  itertools import chain
from collections import Counter

#convert values to ints
df.q3 = df.q3.apply(lambda x: [int(y) for y in x])

#flat columns to list
a = list(chain.from_iterable(df.q3))
#print (a)

#count all ints
b = Counter(a)
print (b)
Counter({1: 21, 2: 10, 3: 10, 0: 6, 4: 5})

print (b[0])
6

答案 1 :(得分:0)

你可以尝试使用q3.idxmin(),
迭代 然后检查返回索引的值是否不是0。

顺便说一句,继续Daniel Sanchez回答: 尝试像这样计算0:
计数(0)

答案 2 :(得分:0)

确保q3系列dtype是一个对象(字符串),然后计算切片。

当初始数据数组包含字符串或整数元素时,这将起作用。

var taskWaitASec = Task.Delay(TimeSpan.FromSeconds(1));
var taskGetData = WebService.Instance.GetData();

// note: you are not awaiting yet, so you program continues:

while (!taskGetData.IsCompleted)
{
    var myTasks = new Task[] {taskWaitASec, taskGetData}
    var completedTask = await Task.WhenAny(myTasks);
    if (completedTask == taskWaitASec)
    {
        UpdateProgress();
        taskWaitASec = Task.Delay(TimeSpan.FromSeconds(1));
    }
}