Вы можете использовать библиотеку Gson для синтаксического анализа строки JSON.
Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(jsonAsString, JsonObject.class);
String pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsString();
String pagePic = jsonObject.getAsJsonObject("pageInfo").get("pagePic").getAsString();
String postId = jsonObject.getAsJsonArray("posts").get(0).getAsJsonObject().get("post_id").getAsString();
Вы также можете прокручивать массив «posts» следующим образом:
JsonArray posts = jsonObject.getAsJsonArray("posts");
for (JsonElement post : posts) {
String postId = post.getAsJsonObject().get("post_id").getAsString();
//do something
}
dict
в качестве аргумента value
в fillna()
Как уже упоминалось в комментарии от @rhkarls о ответе @ Джеффа, используя .loc
, проиндексированный в список столбцов, выигранных ' t поддерживают inplace
операции, которые я тоже считаю расстраивающими. Вот пример:
Пример:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[1,2,3,4,np.nan],
'b':[6,7,8,np.nan,np.nan],
'x':[11,12,13,np.nan,np.nan],
'y':[16,np.nan,np.nan,19,np.nan]})
print(df)
# a b x y
#0 1.0 6.0 11.0 16.0
#1 2.0 7.0 12.0 NaN
#2 3.0 8.0 13.0 NaN
#3 4.0 NaN NaN 19.0
#4 NaN NaN NaN NaN
Предположим, мы хотим fillna
только для x
и y
, а не a
и b
.
Я ожидал бы, что .loc
будет работать (как в задании), но это не так, как упоминалось ранее:
# doesn't work
df.loc[:,['x','y']].fillna(0, inplace=True)
print(df) # nothing changed
Однако документация говорит, что аргумент value
в fillna()
может быть:
поочередно dict / Series / DataFrame значений, определяющих, какое значение использовать для каждого индекса (для серии) или столбцом (для DataFrame). (значения не в файле dict / Series / DataFrame не будут заполнены).
blockquote>Оказывается, что использование dict значений будет работать:
# works df.fillna({'x':0, 'y':0}, inplace=True) print(df) # a b x y #0 1.0 6.0 11.0 16.0 #1 2.0 7.0 12.0 0.0 #2 3.0 8.0 13.0 0.0 #3 4.0 NaN 0.0 19.0 #4 NaN NaN 0.0 0.0
Также , если в вашем подмножестве имеется много столбцов, вы можете использовать понимание dict, как в:
df.fillna({x:0 for x in ['x','y']}, inplace=True) # also works
вы заполняете копию (которую вы тогда не видите)
либо:
fillna
inplace (их не является первичным выигрышем от делать что-то inplac) a_n6[[list_of_fileds]]
является копией в объекте с несколькими dtype), см. здесь: http://pandas.pydata.org /pandas-docs/stable/indexing.html#returning-a-view-versus-a-copyвот более подробное объяснение Pandas: Chained Назначения