【问题标题】:How to replace NaN's from a concatenated dataframe column?如何从连接的数据框列中替换 NaN?
【发布时间】:2020-01-09 07:44:33
【问题描述】:

我目前有一个熊猫数据框。第 1 列和第 2 列的连接产生第 3 列。

我已经尝试使用 df.fillna(") 方法来处理 NaN 值。但是我需要删除连接列中的 NaN。而上述方法只删除现有列。

import pandas as pd
import numpy as np
data = [[], ['arthur','shelby',''], ['michael','','']]
df = pd.DataFrame(data, columns = ['Name', 'LastName','FullName'])
df['FullName'] = df['Name'].map(str) + ' ' + (df['LastName'].map(str))
df1 = df.fillna("")
print(df1)

输出结果列的第一行包含 NaN NaN。但是我希望它是“”“”enter image description here

无论如何要做到这一点???

【问题讨论】:

标签: python pandas


【解决方案1】:

你需要这样使用inplace

import pandas as pd
import numpy as np
data = [[], ['arthur','shelby',''], ['michael','','']]
df = pd.DataFrame(data, columns = ['Name', 'LastName','FullName'])
df['FullName'] = df['Name'].map(str) + ' ' + (df['LastName'].map(str))
df.fillna("",inplace=True)
print(df)

但你真正遇到的问题是你在数据中插入了一个空行,所以你没有NaN's,但你有None。你应该这样做(在你的数据中删除第一个空列表):

import pandas as pd
import numpy as np
data = [['arthur','shelby',''], ['michael','','']]
df = pd.DataFrame(data, columns = ['Name', 'LastName','FullName'])
df['FullName'] = df['Name'].map(str) + ' ' + (df['LastName'].map(str))
df.fillna("",inplace=True)
print(df)

编辑我发现了您的问题,您需要在进行任何其他操作之前执行 fillna,因为您正在连接两个转换为字符串的 nan:

import pandas as pd
import numpy as np
data = [[], ['arthur','shelby',''], ['michael','','']]
df = pd.DataFrame(data, columns = ['Name', 'LastName','FullName'])
df.fillna("",inplace=True)
df['FullName'] = df['Name'].map(str) + ' ' + (df['LastName'].map(str))
print(df)

【讨论】:

  • 你能推荐一下 NaN 吗?我正在解决的实际问题有第一行组件如下第一列:“”,第二列:“”,结果:nan nan
  • 为你总结一下:我已经从一个 excel 文件创建了数据框。第一行的第一列和第二列是空白的。而这 2 列的连接是给 nan nan。没关系,我只想把结果栏中的nan nan换成“”“”。
  • df.fillna("",inplace=True) 这应该用 '' 替换 df 中的所有 NaN。你需要使用inplace=True,所以它会修改DF
  • 如果您不想从 excel 中读取第一行(因为它是空白的),您可以使用 read_excel(skiprows=[1]) (如果您想跳过第 1 行
  • df = pd.DataFrame(df, columns ={ 'A', 'B', 'C', 'D'}) df['D'] = df['B].map (str) + ' ' + (df['C'].map(str)) df.fillna(" ", inplace = True) 我已经尝试过了,但是对于即使是其中一个列条目的地方仍然会得到 nan在excel中是空白的。例如在第一行,'B' 和 'C' 列都是空白的,所以我得到了 nan nan。在第二行'B'有'somevalue','C'是空白所以我得到的结果是somevalue nan
【解决方案2】:

这里有两种方法。

1) 检查此documentation

df.fillna('',inplace=True)

2) 此外,您可以使用替换方法。

df = df.replace(numpy.nan, '', regex=True)

我希望它有所帮助。

【讨论】:

  • 这两个我都试过了,结果还是包含nan nan
  • 您是否也添加了 inplace 选项?
  • 是的,如果结果列中没有任何内容,则这些功能非常有效。但不适用于nan nan
  • 您能否在您的问题中分享您的确切输出?我想检查一下。
  • 我在问题中添加了结果数据框输出的链接。请看一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多