Python跳过空单元格
我希望能够搜索我的数据框并跳过空白单元格。然而,当我在DF中阅读时,它将空格读为“nan” DF1 我希望能够过滤地址1、街道和城镇。如果这些列中有文本,我想在开始处添加“|”,但如果列中没有文本,则跳过该单元格,不添加“|” 期望结果Python跳过空单元格,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我希望能够搜索我的数据框并跳过空白单元格。然而,当我在DF中阅读时,它将空格读为“nan” DF1 我希望能够过滤地址1、街道和城镇。如果这些列中有文本,我想在开始处添加“|”,但如果列中没有文本,则跳过该单元格,不添加“|” 期望结果 Name Address1 Street Town Postcode Will |London Phil 19 |Long Road 添加“|”的简单方法 添加“|”的简单方法 像这样的 imp
Name Address1 Street Town Postcode
Will |London
Phil 19 |Long Road
添加“|”的简单方法
添加“|”的简单方法
像这样的
import numpy as np
for i in ['Address1','Street','Town']:
df[i] = np.where(df[i].notnull(),'|' + df[i].astype(str),'')
其中打印:
print(df)
Name Address1 Street Town Postcode
0 Will |London nan
1 Phil |19.0 |Long Road nan
像这样的
import numpy as np
for i in ['Address1','Street','Town']:
df[i] = np.where(df[i].notnull(),'|' + df[i].astype(str),'')
其中打印:
print(df)
Name Address1 Street Town Postcode
0 Will |London nan
1 Phil |19.0 |Long Road nan
因此,我可以推荐的是研究一下这个问题。根据文档,您可以使用带有附加参数的
pd.read_csv()
函数来决定如何处理NaN
值
import pandas as pd
pd.read_csv("sample.csv", sep=";", keep_default_na=False)
作为pd进口熊猫
pd.read_csv(“sample.csv”,sep=“;”,keep_default_na=False)
因此,根据文档,这可能是一个示例解决方案。:)
如果keep_default_na为False,并且未指定na_值,则不会将任何字符串解析为NaN
因此,我可以推荐的是研究一下这个问题。根据文档,您可以使用带有附加参数的pd.read_csv()
函数来决定如何处理NaN
值
import pandas as pd
pd.read_csv("sample.csv", sep=";", keep_default_na=False)
作为pd进口熊猫
pd.read_csv(“sample.csv”,sep=“;”,keep_default_na=False)
因此,根据文档,这可能是一个示例解决方案。:)
如果keep_default_na为False,并且未指定na_值,则不会将任何字符串解析为NaN
更改@sophods的解决方案以删除NaN值
import pandas as pd
pd.read_csv("sample.csv", sep=";", keep_default_na=False)
import numpy as np
for i in ['Address1','Street','Town']:
df[i] = np.where(df[i].notnull(),'|' + df[i].astype(str),'')
更改@sophods的解决方案以删除NaN值
import pandas as pd
pd.read_csv("sample.csv", sep=";", keep_default_na=False)
import numpy as np
for i in ['Address1','Street','Town']:
df[i] = np.where(df[i].notnull(),'|' + df[i].astype(str),'')
您的意思是,当一行中的两个单元格有一个值时,您希望将|
代码如下:
for r, row in df.iterrows():
for i in range(len(row)):
if i>1 and row[i]!=None and row[i-1]!=None:
df.at[r,col[i]] = '|' + str(row[i])
结果如下:
Name Address1 Street Town Postcode
Will None None London None
Phil 19.0 |Long Road None None
我构建我的数据框架时没有。用您的nan更改None
您的意思是当一行中的两个单元格都有一个值时,您想把|
放进去吗
代码如下:
for r, row in df.iterrows():
for i in range(len(row)):
if i>1 and row[i]!=None and row[i-1]!=None:
df.at[r,col[i]] = '|' + str(row[i])
结果如下:
Name Address1 Street Town Postcode
Will None None London None
Phil 19.0 |Long Road None None
我构建我的数据框架时没有。在每个pands数据框中用您的nan
更改None
必须是某个值,因此需要将nan
替换为空字符串吗?因为if need跳过该单元格
是不可能的。在上面的输出中,当街道为空时,没有“|”,当街道为空时,没有“|”。这不是你想要的吗?有没有其他地方我可以过滤它们,如果它包含文本,然后添加|如果没有|?如果这些列中有文本,我想在开始时添加一个“|”
-那么为什么要从伦敦删除
?不是很快,但应该可以工作:df.applymap(lambda x:“|”+x如果type(x)==str else x)
在每个pands数据框中的“单元格”
必须是某个值,所以需要将nan
替换为空字符串吗?因为if need跳过该单元格
是不可能的。在上面的输出中,当街道为空时,没有“|”,当街道为空时,没有“|”。这不是你想要的吗?有没有其他地方我可以过滤它们,如果它包含文本,然后添加|如果没有|?如果这些列中有文本,我想在开始时添加一个“|”
-那么为什么要从伦敦删除
?不是很快,但应该可以工作:df.applymap(lambda x:“|”+x如果type(x)==str else x)
这显然是错误的。检查预期输出以获取您的评论。我是不是错过了他想要的东西?好吧,我想我不理解他的问题。写得不太清楚。同意,这就是为什么提问道歉编辑了错误的东西的原因。这很好用。非常感谢,希特显然错了。检查预期输出以获取您的评论。我是不是错过了他想要的东西?好吧,我想我不理解他的问题。写得不太清楚。同意,这就是为什么提问道歉编辑了错误的东西的原因。这很好用。谢谢你,为了更准确,我也做了很多调整。@sophods np。哪里速度很快,不是吗?一直在使用它而不是循环:DFixed mine太精确了。@sophods np。哪里速度很快,不是吗?使用它而不是循环:d我需要更改列的列名吗?这里的列名列表col=['name','Address1','Street','Town','Postcode']
@Will。我需要更改列的列名吗?这里的列名列表col=['name','Address1','Street','Town Postcode']
@Will。