我有一个包含 150.000 行和 15 列的表。此示例的重要列是 COUNTRY、COSTCENTER 和 EXTENSION。我正在将 CSV 读入 Pandas Dataframe。所有列都是对象类型。
我想做的是:
- 搜索某个国家/地区(例如“中国”)
- 筛选 COSTCENTER 为 1000 或 2000 或 EXTENSION 以“862”开头的实例
- 应用所有过滤器后,将 COUNTRY 中的国家/地区名称更改为新名称。
我有一个解决方案,但我总是收到有关链接问题的警告:
df.COUNTRY[df.COUNTRY.str.match("China") &
(df.COSTCENTER.str.match("1000") |
df.COSTCENTER.str.match("2000"))] = 'China_new_name'
我不能说,我完全理解为什么我会在这里遇到问题,但我正在寻找替代方案。我尝试使用 lambda 和 apply,但不断收到各种错误。
我现在最新的做法是:
filter_China = df.ix[(df["COUNTRY"]=="China") &
((df["COSTCENTER"]=="1000") | (df["COSTCENTER"]=="2000"))]
它似乎过滤了我正在寻找的内容(我还没有包括对扩展的搜索,因为我首先希望它起作用)。
但是,当我尝试根据我的搜索条件更改值时,我遇到了麻烦:
df.ix[(df["COUNTRY"]=="China") & ((df["COSTCENTER"]=="1000") |
(df["COSTCENTER"]=="2000")), df["COUNTRY"]] = "China_new_name"
我收到此错误: raise KeyError('%s not in index' % objarr[mask])
我在这里缺少什么?这种方法是正确的还是我需要走一条完全不同的路线?