如何从连接的数据框列中替换 NaN?

Posted

技术标签:

【中文标题】如何从连接的数据框列中替换 NaN?【英文标题】:How to replace NaN's from a concatenated dataframe column? 【发布时间】: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。

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

【问题讨论】:

见这里***.com/questions/26837998/… 【参考方案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 您能否在您的问题中分享您的确切输出?我想检查一下。 我在问题中添加了结果数据框输出的链接。请看一下

以上是关于如何从连接的数据框列中替换 NaN?的主要内容,如果未能解决你的问题,请参考以下文章

当我在数据框列中有 NaN 时,如何将推文(对象)添加到绘图图表中?

如何使用 MultiIndex 在 Python 数据框列中进行字符串替换

如何在数据框列中附加值

如何在熊猫数据框中将单元格设置为 NaN

计算 r 中数据框列中数值之间的 NaN 平均数

如何将数据框列转换为字符串并替换 nans(fillna 不起作用)