Вы можете использовать pd.wide_to_long
только для этого. В аргументе stubnames arg вы можете использовать набор имен переменных (исключая name и отбрасывать последние 4 символа) в вашей df, используя этот код: set([x[:-4] for x in df.columns[1:]])
.
pd.wide_to_long(df,stubnames=set([x[:-4] for x in df.columns[1:]]),i=['name'],j='year').reset_index()
Выход:
name year education income children
0 John 2015 13 1 7
1 Phillip 2015 14 2 8
2 Carl 2015 15 3 9
3 John 2016 16 4 10
4 Phillip 2016 17 5 11
5 Carl 2016 18 6 12
Вы могли попытаться действовать в UTF-8 и также позволить PHP знать тот факт.
У меня была проблема с PHP's json_decode
не будучи способен декодировать строку UTF-8 JSON (с некоторыми "странными" символами кроме изогнутых кавычек, которые Вы имеете). Мое решение состояло в том, чтобы подсказать PHP, что я работал в режиме UTF-8 путем вставки метатега Типа контента в страницу HTML, которая делала отправление PHP. Тем путем тип контента отправленных данных, которые являются строкой JSON, также был бы UTF-8:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
После этого, PHP's json_decode
смог правильно декодировать строку.
можно ли копировать эту проблему надежно? и раз так можно ли отправить демонстрационные данные, которые возвращают пустой указатель? я уверен, что Вы знаете это, но для информационной пользы для других, натыкающихся на это, кто не может, RFC 4627 описать JSON, и это - частая ошибка предположить, что действительный JavaScript является допустимым JSON., лучше думать о JSON как о подмножестве JavaScript.
в ответ на редактирование:
я предложил бы проверить, чтобы удостовериться, что Ваша информация заполняется в Вашем Сценарии PHP (прежде чем это будет выдано к json_decode), и также проверяющей ту информацию (особенно, если можно надежно воспроизвести ошибку). можно попробовать блок проверки допустимости онлайн за удобство. на основе очень ограниченной информации это походит, возможно, что это приводит к таймауту и не захватывает все данные? существует ли потребность в таком большом наборе данных?
Вы могли попытаться анализировать его с другим синтаксическим анализатором и искать ошибку - я знаю, что синтаксические анализаторы Python JSON являются очень высококачественными. Если Вам установили Python, достаточно легко выполнить текст через программу проверки синтаксиса demjson. Если это - очень большой набор данных, можно пользоваться моей библиотекой jsonlib - использование памяти будет выше, чем с demjson, но это будет работать быстрее, потому что это записано в C.
У меня была именно эта проблема, и оказалось, что это произошло из-за того, что ColdFusion не помещал печатных символов в пакеты JSON (эти символы действительно существовали в наших данных), но они не могут войти в JSON .
Два вопроса на этом сайте устранили эту проблему для меня, хотя я выбрал решение PHP, а не решение ColdFusion, так как считаю его более элегантным из двух.
Исправить строку перед передачей его в json_decode ()
$string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);
Используйте функцию cleanXmlString () в этом вопросе SO после использования serializeJSON ()