Если вы используете MVC 4, обязательно проверьте этот ответ .
Если вы все еще получаете error:
maxJsonLength
в максимальное значение в web.config , ваша проблема в том, что:
Значение свойства MaxJsonLength применяется только к внутреннему экземпляру JavaScriptSerializer, который используется асинхронным уровнем связи для вызова методов Web-сервисов. ( MSDN: ScriptingJsonSerializationSection.MaxJsonLength Свойство )
В принципе, «внутренний»
JavaScriptSerializer
учитывает значениеmaxJsonLength
, когда вызывается из веб-метода; прямое использованиеJavaScriptSerializer
(или использование с помощью MVC action-method / Controller) не учитывает свойствоmaxJsonLength
, по крайней мере, не из разделаsystemWebExtensions.scripting.webServices.jsonSerialization
файла web.config.As обходной путь, вы можете сделать следующее в своем контроллере (или в любом месте):
var serializer = new JavaScriptSerializer(); // For simplicity just use Int32's max value. // You could always read the value from the config section mentioned above. serializer.MaxJsonLength = Int32.MaxValue; var resultData = new { Value = "foo", Text = "var" }; var result = new ContentResult{ Content = serializer.Serialize(resultData), ContentType = "application/json" }; return result;
Этот ответ - моя интерпретация этого ответа на форум asp.net .
Сначала разделить столбец запятой, затем groupby
по столбцу и использовать генератор для сглаживания вложенных списков с помощью set
и join
:
df = (distinct_category['category'].str.split(', ')
.groupby(distinct_category['top_level_domain'])
.agg(lambda x: ', '.join(set(y for z in x for y in z)))
.reset_index())
print (df)
top_level_domain category
0 doubleclick.net Ads, Online Shopping, Web Ads
1 google-analytics.com Internet Services
2 google.com Content Server, Search Engines
3 inspectlet.com Internet Services
4 live.com None Assigned
5 service-now.com Business, Software/Hardware
Другим решением является присвоение обратно разделенных значений: [116 ]
df = (distinct_category.assign(category = distinct_category['category'].str.split(', '))
.groupby('top_level_domain')['category']
.agg(lambda x: ', '.join(set(y for z in x for y in z)))
.reset_index())
Сначала разверните ваш фрейм данных, чтобы каждая строка содержала только одну категорию:
split = df['category'].str.split(', ')
lens = split.str.len()
df = pd.DataFrame({'top_level_domain': np.repeat(df['top_level_domain'].values, lens),
'category': np.concatenate(split)})
Затем удалите дубликаты и используйте agg
с str.join
:
res = df.drop_duplicates()\
.groupby('top_level_domain')['category'].agg(','.join)
У меня работает следующий код:
df =df.groupby('top_level_domain')['category'].agg([('category', ', '.join)]).reset_index()