Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:解析";列表对象没有属性';Loc'&引用;_Python_Pandas - Fatal编程技术网

Python:解析";列表对象没有属性';Loc'&引用;

Python:解析";列表对象没有属性';Loc'&引用;,python,pandas,Python,Pandas,我使用以下方法将CSV导入为数据帧: import numpy as np import pandas as pd df = pd.read_csv("test.csv") 然后,我尝试基于ID执行一个简单的替换: df.loc[df.ID==103,['fname','lname']='Michael','Johnson' 我得到以下错误: AttributeError:“list”对象没有属性“loc” 注意,当我打印pd.version()时,我得到了0.12.0,所以使用11之前的版

我使用以下方法将CSV导入为数据帧:

import numpy as np
import pandas as pd

df = pd.read_csv("test.csv")
然后,我尝试基于ID执行一个简单的替换:
df.loc[df.ID==103,['fname','lname']='Michael','Johnson'

我得到以下错误:

AttributeError:“list”对象没有属性“loc”


注意,当我打印pd.version()时,我得到了0.12.0,所以使用11之前的版本不是问题(至少据我所知)。有什么想法吗?

回溯向您表明df是一个
列表
,而不是您的代码行中预期的
数据帧


这意味着在
df=pd.read\u csv(“test.csv”)
df.loc[df.ID==103,['fname','lname']='Michael','Johnson'
之间有其他代码行将列表对象分配给
df
。检查那段代码,找出你的bug,如果答案正确的话。如果右侧列表与替换元素的数量匹配,Loc分配工作正常

In [56]: df = DataFrame(dict(A =[1,2,3], B = [4,5,6], C = [7,8,9]))

In [57]: df
Out[57]: 
   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

In [58]: df.loc[1,['A','B']] = -1,-2

In [59]: df
Out[59]: 
   A  B  C
0  1  4  7
1 -1 -2  8
2  3  6  9

从评论中可以看出:“我正在做这件事:”

这里创建的是一个“掩码”:一个带有布尔值的数组,表示索引的哪个部分满足您的条件

要根据您的条件筛选数据帧,请执行以下操作:

df = df[df.hc == 2]
更明确一点是:

mask = df.hc == 2
df = df[mask]
如果您希望保留整个数据帧,并且只希望替换特定的值,则可以使用以下方法替换:。另外,另一种(从性能角度来看非常好的)方法是创建一个单独的数据帧,其中from/to值作为列,并使用pd.merge将其合并到现有的数据帧中。也可以使用索引设置值:

df[mask]['fname'] = 'Johnson'

但对于更大的替换集,您可能希望使用其他两种方法中的一种,或者使用lambda函数的“apply”(用于值转换)。最后但并非最不重要的一点:可以使用.fillna('bla')快速填充NA值

这种语法对我来说很好——如果你提供了一个可复制的示例,那么会更容易提供帮助,因为这可能取决于csv文件中的数据问题。是的,对我也适用,csv的示例可能会有所帮助。
df[mask]['fname'] = 'Johnson'