我正试图将Stata代码重新编程为Python以提高速度,我被指向PANDAS的方向。然而,我很难理解如何处理数据。
假设我想遍历列标题“ID”中的所有值。如果该ID与特定数字匹配,那么我想更改两个对应的值FirstName和LastName。
在斯塔塔,情况是这样的:
replace FirstName = "Matt" if ID==103
replace LastName = "Jones" if ID==103
因此,这将替换FirstName中与ID==103到Matt的值对应的所有值。
在熊猫方面,我正在尝试这样的事情
df = read_csv("test.csv")
for i in df['ID']:
if i ==103:
...
不知道从这里去哪里。有什么想法吗?
您可以使用
map
,它可以映射来自dictonairy甚至自定义函数的值。假设这是您的df:
创建指令:
地图:
结果将是:
或者使用自定义函数:
这个问题可能仍然经常被访问,因此值得为卡西斯的回答提供一个补充。可以对内置类
dict
进行子类化,以便为“丢失”键返回默认值。这种机制对熊猫很有效。但见下文。这样就可以避免关键错误。
同样的事情可以通过下面的方式更简单地完成。对dict对象的
get
方法使用“default”参数使其不必对dict进行子类划分一种方法是使用Python的切片和索引特性来逻辑地计算条件所在的位置,并覆盖其中的数据。
假设您可以使用
pandas.read_csv
将数据直接加载到pandas
中,那么下面的代码可能对您有所帮助。如注释中所述,您还可以一次完成对两列的赋值:
请注意,您需要
pandas
版本0.11或更新版本才能使用loc
进行覆盖分配操作。另一种方法是使用所谓的链式赋值。它的行为不太稳定,因此不被认为是最佳解决方案(在文档中是explicitly discouraged),但了解以下内容很有用:
相关问题 更多 >
编程相关推荐