Python Pandas-根据不同列中的空白单元格将文本输入到列中
这是我的密码:Python Pandas-根据不同列中的空白单元格将文本输入到列中,python,pandas,Python,Pandas,这是我的密码: finalCSV = pd.read_csv('pathName') #Open new CSV #create col for isMAP based on true or false finalCSV['isMap'] = np.where(finalCSV['MAP'] == finalCSV['productPrice'], 'True', 'False') finalCSV = finalCSV.sort_values(by = ['isMap'
finalCSV = pd.read_csv('pathName') #Open new CSV
#create col for isMAP based on true or false
finalCSV['isMap'] = np.where(finalCSV['MAP'] == finalCSV['productPrice'], 'True', 'False')
finalCSV = finalCSV.sort_values(by = ['isMap'], ascending = True,) #Make it so the falses come out first
if finalCSV['productSKU'].isna().all():
finalCSV['isMap'].str.replace('False' ,'N/A')
finalCSV.to_csv('pathName', index = False) #Close and overwrite CSV
这是我正在处理的csv文件的图像
我要做的是,如果“productSKU”中的相邻单元格为空,则在“isMap”列上输入文本N/A。但是,当我运行代码段时,excel文件将保留“FALSE”而不是“N/A”
编辑:这是我的CSV的链接
一些额外的澄清
给出了前3列,productName、productOMS、productPrice、productSKU和productURL都是我在webscraper中获得的项目。isMap是我在这个程序中创建的一个列,然后用结果动态填充它
所以
现在,如果我的webscraper无法获取产品SKU和/或productName,则意味着该产品在网站上不存在
if productSKU is NULL, isMap would return not available
这是数据帧头:
{'SKU': {0: 'FRC5131-WM-33', 275: 'KECOM-36', 276: 'DW-BS-24', 277: 'BS655N-48', 278: '8654WM-36'},
'MAP': {0: nan, 275: 779.95, 276: nan, 277: 1299.95, 278: 1295.95},
'productSKU': {0: nan, 275: nan, 276: nan, 277: nan, 278: nan},
'productPrice': {0: nan, 275: nan, 276: nan, 277: nan, 278: nan},
'productName': {0: nan, 275: nan, 276: nan, 277: nan, 278: nan},
'HOME DEPOT (OMSID)': {0: 312962522, 275: 206922074, 276: 308581002, 277: 312332575, 278: 309618527},
'productURL': {0: 'https://www.homedepot.com/p/312962522', 275: 'https://www.homedepot.com/p/206922074', 276: 'https://www.homedepot.com/p/308581002', 277: 'https://www.homedepot.com/p/312332575', 278: 'https://www.homedepot.com/p/309618527'},
'isMap': {0: 'False', 275: 'False', 276: 'False', 277: 'False', 278: 'False'},
'productOMS': {0: 312962522, 275: 206922074, 276: 308581002, 277: 312332575, 278: 309618527}}
编辑:
对于您发布的CSV文件,finalCSV['productSKU'].isna().all()
为False
——第7行和第9行的productSKU
列中有值
手动删除这两个值会产生错误,因为
isMap
列被自动检测为bool
类型
另一件令人困惑的事情是,Pandas将字符串N/A
解释为“非数字”值。。。!请参阅na_值
下的文档
我建议使用N/A
以外的值作为结果值。:-)原始答案和下面的固定代码
解决办法似乎是:
finalCSV=pd.read_csv(路径名,dtype={'isMap':str})#打开新的csv
is_na_index=finalCSV['isMap'][finalCSV['productSKU'].isna()].index
finalCSV.loc[is_na_索引,'isMap']=finalCSV.loc[is_na_索引,'isMap'].替换('FALSE','notavailable'))
finalCSV.to_csv(路径名,索引=False)#关闭并覆盖csv
如果其他人也有同样的问题,这就成功了
finalCSV['isMap'] = np.where( finalCSV['productSKU'].isna(), "Not Available", finalCSV['isMap'])
我看到了一些正在发生的事情——其中之一是熊猫自动猜测每个CSV列的数据类型。请编辑您的帖子以包含CSV文件数据,好吗?另一点——也是最重要的一点——是,
.replace()
在默认情况下不进行替换。请参阅--inplace
默认为False
。最简单的修复方法似乎是在调用.replace()
的行首添加finalCSV['isMap']=
。但是请先发布CSV数据:-)谢谢没有这样做,我将发布我的CSV数据的一部分,作为对post的编辑对不起,我如何才能将文件上载到StackOverflow不要上载文件。执行dataframe.head()到_dict()并粘贴output@sammywemmy我想我明白了,我只是打印了代码(finalCSV.head().tp_dict())@GregSadetsky首先感谢您的帮助!其次,我收到的数据可以有一个MAP和productPrice。如果有,并且这些值匹配,则isMap是我创建的一个列,它将填充True。如果MAP和productPrice不匹配,则isMap将填充False。没有productSKU的项目是不存在的项目在我正在浏览的网站上,我想用“不可用”填充isMap,我会在我的帖子中进一步说明。
finalCSV['isMap'] = np.where( finalCSV['productSKU'].isna(), "Not Available", finalCSV['isMap'])