PANDAS-数据类型对象 - .loc不起作用



因此,我有一个非常简单的pandas脚本,用来用其他值替换excel中的值。当我试图替换数值时,有一个Colum(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中清除过滤器),然后我的数据框架准备好

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()

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

尝试:

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

这将使您的所有细胞转换为字符串(例如350为" 350")

然后:

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

fyi:我认为您不需要此cas中的.loc。

最新更新