熊猫-数据类型对象-.loc对数字无效

时间:2019-02-28 01:09:29

标签: python excel pandas

所以我有一个非常简单的pandas脚本,可用来用其他值替换excel中的值。当我尝试替换数值时,有一个column(Fm)不起作用。列Fm dtype是对象。但是,当我尝试替换350值时,它只是行不通(在我的代码行中对此进行了评论),但其他所有内容都起作用。我无法将文件附加到stackoverflow上,并且由于在工作机器上而无法创建链接。有没有人看到过这种性质的问题?

import pandas as pd
import numpy as np
data = pd.read_excel("2.27.xlsm", encoding = "ISO-8859-1", dtype=object)
data.loc[data.F == 'DBD', 'F'] = 'BFD'
data.loc[data.Fm == '350', 'Fm'] = 'test' # this line does not work
data.loc[data.Fm == 'B25', 'F'] = 'BFD'
data.loc[data.Fm == 'B50', 'F'] = 'BFD'

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
data.to_excel(writer, sheet_name='Sheet1')
writer.save()

Name: Fm, Length: 1521, dtype: object

-抱歉,我在下面开始了本问题的第二部分,因为第7-8行似乎对1-6取反?-----

嗨,我下面有一个示例脚本,该脚本在excel文件上运行。基本上是之后 第6行,我想过滤掉F列中包含BFD和SFD的行(我知道刚刚在上面的代码中分配了这些值,而且还有更多这些值存在于脚本之前的不同行中)。过滤之后,只需将第7-8行中的逻辑应用于数据帧。因此,从根本上来说,您可以使用pandas按列中的单元格值过滤出行,然后对未过滤出的内容应用逻辑,然后仅对所有内容进行不过滤(就像您要在excel中清除过滤器一样),并准备好我的数据框< / p>

import pandas as pd
import numpy as np
data = pd.read_excel("2.27.xlsm", encoding = "ISO-8859-1", dtype=object)
data.loc[data.F == 'DBD', 'F'] = 'BFD'
data.loc[data.F == 'DUB', 'F'] = 'BFD'
data.loc[data.F == 'DCD', 'F'] = 'SFD'
#Now I want to apply this logic and filter out any rows that have values of BFD or SF in column F and then apply to logic below (to not overwrite any work done above)
data.loc[data.Fm == 'B25', 'F'] = 'BFD'
data.loc[data.Fm == 'B50', 'F'] = 'BFD'

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
data.to_excel(writer, sheet_name='Sheet1')
writer.save()

1 个答案:

答案 0 :(得分:2)

我在进行合并时也遇到类似的情况,我认为可能会发生的情况是,尽管列是一个对象,但是在进行比较时会单独考虑每个单元格。 这意味着,如果要在列中使用混合数据类型或在列中使用混合数据类型,则需要在进行比较之前将该列(在这种情况下)设置为字符串。

尝试:

dafa.loc[:,'Fm'] = data.Fm.astype(str) 

这会将您所有的单元格转换为字符串(例如350将为'350')

然后:

data[data.Fm == '350', 'Fm'] = 'test' 

仅供参考:我认为您在此cas中不需要.loc。