当前位置: 首页 > 知识库问答 >
问题:

用随机字符串替换熊猫DataFrame中的NaN,而不使用fillna

南宫泓
2023-03-14

我有一个熊猫数据框,如下所示

      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

我想用不含重复项的随机字符串替换“EMAIL”列中的NaN,该字符串不一定包含@。

我试图做一个def生成随机字符串,但NaN被替换为相同的随机字符串,因为我毕竟使用了'fillna'方法。

看起来,正如我看到的其他Q$As,fillna中的def只工作一次,并用同样的值或字符串替换所有的NaN。

我应该试着用“for”一个接一个地替换它们吗?

或者有没有一种更像蟒蛇的方式来取代它们?

共有2个答案

司寇星海
2023-03-14

您可以使用pd.util.testing.rands_array,将所需字符串的长度作为第一个(nchars)参数传递给它,并将NaNs的数量作为第二个(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_数组可以替换为返回具有特定大小的列表或数组的任何函数。

郁高韵
2023-03-14

您可以尝试以下方法:

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)
 类似资料:
  • 问题内容: 我有一个Pandas Dataframe,如下所示: 我想用一个空字符串删除NaN值,使其看起来像这样: 问题答案: 这可能会有所帮助。它将用空字符串替换所有NaN。

  • 问题内容: 我想替换列中的子字符串 到。 需求输出 我尝试,但它返回。 问题答案: 使用与更换和:

  • 我有以下数据框 我想用替换和,因此最终的数据帧是 我尝试了以下方法,但不起作用:

  • 我有一个数据框,如下所示: 我想用一个空字符串删除NaN值,这样看起来像这样:

  • 我有一个空单元格的数据框,并希望用NaN替换这些空单元格。之前在这个论坛上提出的解决方案有效,但前提是单元格包含一个空间: 当单元格为空时,此代码不起作用。有人建议用熊猫代码来代替空细胞吗?

  • 我有一个熊猫数据框(通过导入csv文件创建)。我想用NaN替换空白值。这些空白值中有些是空的,有些包含(可变数量的)空格,,,等等。 使用这个线程中的建议 它会替换所有只包含空格的字符串,但也会替换每个包含空格的字符串,这不是我想要的。 如何仅用空格和空字符串替换字符串?