идентифицировать данные с нулевым значением в python - PullRequest
0 голосов
/ 06 мая 2020

У меня есть данные в следующем формате csv

Date,State,City,Station Code,Minimum temperature (C),Maximum temperature (C),Rainfall (mm),Evaporation (mm),Sunshine (hours),Direction of maximum wind gust,Speed of maximum wind gust (km/h),9am Temperature (C),9am relative humidity (%),3pm Temperature (C),3pm relative humidity (%)
2017-12-25,VIC,Melbourne,086338,15.1,21.4,0,8.2,10.4,S,44,17.2,57,20.7,54
2017-12-25,VIC,Bendigo,081123,11.3,26.3,0,,,ESE,46,17.2,53,25.5,25
2017-12-25,QLD,Gold Coast,040764,22.3,35.7,0,,,SE,59,29.2,53,27.7,67
2017-12-25,SA,Adelaide,023034,13.9,29.5,0,10.8,12.4,N,43,18.6,42,27.7,17

Вывод для VI C sohuld be

S : 1
ESE : 1
SE : 0
N : 0

, однако я получаю вывод как

S : 1
ESE : 1

Таким образом, хотелось бы знать, как можно использовать уникальную функцию для включения двух других отсутствующих результатов. Ниже приведена программа, вызывающая файл csv

import pandas as pd
#read file
df = pd.read_csv('climate_data_Dec2017.csv')

#marker
value = df['Date']
date = value == "2017-12-26"
marker = df[date]

#group data
directionwise_data = marker.groupby('Direction of maximum wind gust')
count = directionwise_data.size()
numbers = count.to_dict()

for key in numbers:
  print(key, ":", numbers[key])

1 Ответ

0 голосов
/ 06 мая 2020

Начнем с того, что я не уверен, что вы пытаетесь получить из этого: в вашем образце данных нет записей «2017-12-26», но вы используете его в своем коде, поэтому я предполагаю для этого образец, я изменю код на «2017-12-25», чтобы посмотреть, что он производит, теперь он дает именно то, что вы ожидаете! Поэтому я предполагаю, что в ваших полных данных у вас нет записей для «2017-12-26» для SE и N, и поэтому они не группируются, я предлагаю вам создать уникальный набор из четырех направлений, которые вы в вашем df , а затем просто посчитайте их вхождения в фрагменте вашего фрейма данных на нужную дату!

Или, если все, что вам нужно, это сколько записей для каждого направления у вас есть по дате, почему бы просто не развернуть его, как показано ниже:

output = df.pivot_table(index='Date', columns = 'Direction of maximum wind gust', aggfunc={'Direction of maximum wind gust':'count'}, fill_value=0)

РЕДАКТИРОВАТЬ: Хорошо, поэтому я написал это очень быстро, что должно дать вам то, что вы хотите, однако вам нужно скормить его в нужную дату:

import pandas as pd

#read csv
df = pd.read_csv('climate_data_Dec2017.csv')
#specify date
neededDate = '2017-12-25'
#slice dataframe to keep needed records based on the date
subFrame = df.loc[df['Date'] == neededDate].reset_index(drop=True)
#set count to zero
d1 = 0 #'S'
d2 = 0 #'SE'
d3 = 0 #'N'
d4 = 0 #'ESE'
#loop over slice and count directions
for i, row in subFrame.iterrows():
    direction = subFrame.at[i,'Direction of maximum wind gust']
    if direction == 'S':
        d1 = d1+1
    elif direction == 'SE':
        d2 = d2+1
    elif direction == 'N':
        d3 = d3+1
    if direction == 'ESE':
        d4 = d4+1
#print directions count
print ('S = ' + str(d1))
print ('SE = ' + str(d2))
print ('N = ' + str(d3))
print ('ESE = ' + str(d4))

S = 1
SE = 1
N = 1
ESE = 1
...