Замените NaN в pandas DataFrame случайными строками без использования fillna - PullRequest
1 голос
/ 20 февраля 2020

У меня есть pandas DataFrame, как показано ниже

      NAME      EMAIL      HEIGHT      WEIGHT

1     jlka       NaN        170          70

2     qwer     eee@ttt      180          80

3     ioff       NaN        175          75

4     iowu     iou@add      170          60

И я хочу заменить NaN в столбце 'EMAIL' случайными строками без дубликатов, которые необязательно содержат @.

Я пытался создать def, который генерирует случайные строки, но NaN были заменены той же самой случайной строкой, так как я все-таки использовал метод fillna.

Похоже, и, как я видел, другие Q $ As def в fillna работает только один раз и заменяет все NaN одинаковыми значениями или строки, полученные из определения.

Должен ли я попробовать предложение «за», чтобы заменить их одно за другим?

Или есть еще Pythoni c способ их замены?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

вы можете попробовать что-то вроде этого:

import pandas as pd
from numpy import nan
import random
import string

df = pd.DataFrame({
    'Name': ['aaa','bbb','CCC'],
    'Email': [nan,'ddd',nan]})

def processNan (x):
    return ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(10))

df['Email'] = df['Email'].apply(lambda x: processNan(x) if x is nan else x)
0 голосов
/ 20 февраля 2020

Вы можете использовать pd.util.testing.rands_array, передавая длину желаемой строки в качестве первого аргумента (nchars) и число NaN s в качестве второго аргумента (size):

df.loc[df.EMAIL.isna(), "EMAIL"] = pd.util.testing.rands_array(10, sum(df.EMAIL.isnull()))      

>>> df                                                                                              

   NAME       EMAIL  HEIGHT  WEIGHT
1  jlka  YxzVaC38uw     170      70
2  qwer     eee@ttt     180      80
3  ioff  33kyDArtip     175      75
4  iowu     iou@add     170      60

pd.util.testing.rand_array можно заменить любой функцией, которая возвращает список или массив с указанным размером c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...