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