ValueError: несоответствие формы: массив значений shape (30,) не может быть передан для индексации результата shape (9,30) - PullRequest
0 голосов
/ 29 апреля 2018
numeric_cols = ['temp', 'windchill', 'dewpoint', 'humidity', 'pressure', 'visibility', 'wind_speed', 'gust_speed', 'precip']
weather_list[numeric_cols] = weather_list[numeric_cols].apply(lambda x: re.sub('[^0-9]', '', str(x)))
weather_list[numeric_cols] = pd.to_numeric(weather_list[numeric_cols], errors='coerce')
weather_list[numeric_cols] = weather_list[numeric_cols] / 10

Я пытаюсь немного очистить набор данных, но получаю ошибку несоответствия формы. Судя по ошибке, она говорит, что я сопоставляю 30 столбцов, 0 строк с 9 столбцами, 30 строк ... Я явно что-то сделал не так! Я использовал этот метод несколько раз прежде, но никогда не получал ошибку - у кого-нибудь есть какие-либо предложения относительно того, что я делаю неправильно? Данные извлекаются из html в pandas df 'weather_list'.

time     temp windchill dewpoint humidity  pressure visibility  \
0   12:53 AM  21.0 °F         -  19.0 °F      92%  30.47 in    10.0 mi   
1    1:53 AM  21.9 °F         -  19.9 °F      92%  30.48 in    10.0 mi   
2    2:53 AM  21.9 °F         -  19.0 °F      89%  30.50 in    10.0 mi   
3    3:53 AM  21.0 °F         -  19.0 °F      92%  30.50 in    10.0 mi   
4    4:53 AM  19.9 °F         -  18.0 °F      92%  30.51 in    10.0 mi   
5    5:53 AM  21.0 °F         -  18.0 °F      88%  30.51 in    10.0 mi   


   wind_direction wind_speed gust_speed  precip  events conditions  
0            Calm       Calm          -     NaN     NaN      Clear  
1            Calm       Calm          -     NaN     NaN      Clear  
2            Calm       Calm          -     NaN     NaN      Clear  
3            Calm       Calm          -     NaN     NaN      Clear  
4            Calm       Calm          -     NaN     NaN      Clear  
5            Calm       Calm          -     NaN     NaN      Clear

Спасибо!

1 Ответ

0 голосов
/ 29 апреля 2018

Мы можем использовать applymap, чтобы применить функцию к нескольким столбцам. Пожалуйста, внесите следующие изменения в свой код.

## using applymap here
weather_list[numeric_cols] = weather_list[numeric_cols].applymap(lambda x: re.sub(r'[^0-9]', '', str(x)))

## now we pass series to pd.to_numeric instead of data frame
weather_list[numeric_cols] = weather_list[numeric_cols].apply(lambda x: pd.to_numeric(x, errors='coerce'))

weather_list[numeric_cols] = weather_list[numeric_cols] / 10
...