我使用一些数据库并使用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?这个问题有什么问题???
答案 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));
}
}