У меня есть датафрейм, как показано ниже:

       score           pvpdate
0      {2: 29, 4: 24}  2018-05-23
1      {2: 23, 4: 24}  2018-05-29
2      {2: 36, 4: 25}  2018-05-23

И я хочу отфильтровать столбец оценки и получить результат, как

     score1      score2     pvpdate
0        29          24     2018-05-23
1        23          24     2018-05-29
2        36          25     2018-05-23

Как я могу это сделать? Я пробовал способы, которыми этот столбец оценки похож на столбец json, и он не работает.

0
张羽白 22 Окт 2018 в 16:40

2 ответа

Лучший ответ

Если хотите, чтобы имена столбцов из ключей словарей извлекали столбец с помощью { {X0}}, используйте конструктор DataFrame и измените имена столбцов на add_prefix, последний join все столбцы без score:

df = pd.DataFrame(df.pop('score').values.tolist()).add_prefix('score').join(df)
print (df)
   score2  score4     pvpdate
0      29      24  2018-05-23
1      23      24  2018-05-29
2      36      25  2018-05-23

Anf, если вы хотите, чтобы имена столбцов были созданы по длине анализируемого DataFrame, используйте f-string s:

#if stored dictionary like strings
df['score']=df['score'].map(ast.literal_eval) 

df1 = pd.DataFrame(df.pop('score').values.tolist())
df1.columns = [f'score{i}' for i in range(1, len(df1.columns) + 1)]
df = df1.join(df)
print (df)
   score1  score2     pvpdate
0      29      24  2018-05-23
1      23      24  2018-05-29
2      36      25  2018-05-23
0
jezrael 23 Окт 2018 в 05:09

Столбец словаря в фрейме данных pandas Я нашел ответ от этого, используя import ast df ['score'] = df ['score']. map (лямбда d: ast.literal_eval (d)) dfNew = df.join ( pd.DataFrame ( DF [ ' оценка '] . to_dict ( ) ) . Т)

0
张羽白 23 Окт 2018 в 02:19
52930856