Почему метод замены в пандах для подмножества столбцов не работает с параметром inplace = True? [Дубликат]

Вы можете использовать библиотеку 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
}
6
задан Beau Bristow 24 February 2014 в 22:31
поделиться

2 ответа

Используйте 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 не будут заполнены).

Оказывается, что использование 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
9
ответ дан C8H10N4O2 27 August 2018 в 16:12
поделиться

вы заполняете копию (которую вы тогда не видите)

либо:

вот более подробное объяснение Pandas: Chained Назначения

6
ответ дан Community 27 August 2018 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: