0
我有一个数据帧像下面 -如何检查python熊猫数据框特定列中的缺失值?
time machine message
6 2017-08-07 05:24:31,955 solid qa : 6502444
20 2017-08-07 05:24:32,024 solid prod : 6502445
32 2017-08-07 05:24:32,033 solid qa : 6502445
44 2017-08-07 05:24:32,041 solid prod : 6502446
56 2017-08-07 05:24:32,055 solid qa : 6502446
68 2017-08-07 05:24:32,063 solid prod : 6502447
80 2017-08-07 05:24:32,071 solid qa : 6502450
92 2017-08-07 05:24:32,079 solid prod : 6502451
92 2017-08-07 05:24:32,079 solid qa : 6502452
104 2017-08-07 05:24:32,086 solid prod : 6502453
116 2017-08-07 05:24:32,094 liquid qa : 700001
128 2017-08-07 05:24:32,101 liquid prod : 700004
140 2017-08-07 05:24:32,108 liquid qa : 700002
152 2017-08-07 05:24:32,115 liquid prod : 700005
164 2017-08-07 05:24:32,126 liquid qa : 700007
176 2017-08-07 05:24:32,133 liquid prod : 700010
188 2017-08-07 05:24:32,140 liquid qa : 700008
200 2017-08-07 05:24:32,147 liquid prod : 700011
我想知道哪些号码遗漏在消息栏相对于QA和PROD。
样品例如 -
机列 - 固体,在消息栏QA:6502446。在这一行之后,我期待机器列 - 固体,在消息栏qa:6502447但它不可用意味着缺少那样的6502448也是缺少。 prod也是如此。
我要生成已头象下面以CSV格式一个输出文件 -
machine,message_header,missing_number_size,start,end,start_time,end_time
的详细信息 -
- 机是固体或液体(在这种情况下,即如果第三个可用,那么需要考虑)。
- message_header在消息列值中可用。它是qa或prod固定的。
- missing_number_size是在qa和prod之间错过的数字。
- 开始是(最后可用数字+ 1)在从消息列中遗漏之前。
- 结束是(第一个可用编号-1)在从邮件列中遗漏之后。
- start_time是从时间列错过之前的最后一个可用时间。
- end_time是从时间列错过后的第一个可用时间。
Output.csv将这个样子 - 基于评论回答我做什么
machine,message_info,missin_number_size,start,end,start_time,end_time
solid,qa,3,6502447,6502449,2017-08-07 05:24:32,055,2017-08-07 05:24:32,071
solid,qa,1,6502451,6502451,2017-08-07 05:24:32,071,2017-08-07 05:24:32,079
solid,prod,3,6502448,6502450,2017-08-07 05:24:32,063,2017-08-07 05:24:32,079
solid,prod,1,6502452,6502452,2017-08-07 05:24:32,079,2017-08-07 05:24:32,086
liquid,qa,4,700003,700006,2017-08-07 05:24:32,108,2017-08-07 05:24:32,126
liquid,prod,4,700006,700009,2017-08-07 05:24:32,115,2017-08-07 05:24:32,133
编辑1?
我做了下面的实验,但它不是熊猫的方式。它花费时间在控制台上打印输出结果。我想熊猫的方式(快) -
假设在代码 - 数据是字典,其中包含像上面一样的整体数据框的价值。
for key, value in data.iteritems():
prev_qa_no = 0
prev_prod_no = 0
prev_time = ""
total_count = 0
flag = False
qa = value[value['message'].str.contains("qa")]
prod = value[value['message'].str.contains("prod")]
qa['qa'] = qa['message'].apply(remove_name)
del qa['message']
qa.sort_values('qa',inplace=True)
for index, row in qa.iterrows():
time = row['time']
feed = row['feed']
qa_no = int(row['qa'])
if flag:
if (qa_no - prev_qa_no) > 1:
diff=qa_no-prev_qa_no+1
print str(feed.strip())+",qa,"+str(diff)+","+str(prev_qa_no+1)+","+str(qa_no-1)+","+str(prev_time.strip())+","+str(time)
flag = True
prev_time = time
prev_qa_no = qa_no
prev_time = ""
total_count = 0
prod['prod'] = prod['message'].apply(remove_name)
del prod['message']
prod.sort_values('prod',inplace=True)
flag = False
for index, row in prod.iterrows():
time = row['time']
feed = row['feed']
prod_no = int(row['prod'])
if flag:
if (prod_no - prev_prod_no) > 1:
diff=prod_no-prev_prod_no+1
print str(feed.strip())+",prod,"+str(diff)+","+str(prev_prod_no+1)+","+str(prod_no-1)+","+str(prev_time.strip())+","+str(time)
flag = True
prev_time = time
prev_prod_no = prod_no
如果您在理解此问题时有任何疑问,请随时填写。
@ Wli-您还没有得到它的问题。我不想找到在产品中可用的缺失数据,而在qa中不可用,反之亦然。我想查找个人(qa和prod)的缺失数据。请参阅Output.csv以更好地理解它。 – kit
嗯,我相信我的答案的第一部分仍然有帮助。您需要处理我称为qa和prod的数据框。您可能还需要按机器进行分组(df.groupby('machine')) – Wli