如何在熊猫中有条件地修改列中的单元格?

时间:2018-06-15 22:17:53

标签: python pandas dataframe

我有一个csv数据集,无论出于何种原因,在某些名称的末尾都有一个额外的星号(*)。我试图删除它们,但我遇到了麻烦。我只想在以*结尾的情况下替换名称,否则保持原样。

我尝试了以下几种变体,但收效甚微。

 import pandas as pd
 people = pd.read_csv("people.csv")
 people.loc[people["name"].str[-1] == "*"]] = people["name"].str[:-1]

这里我收到以下错误:

 ValueError: Must have equal len keys and value when setting with an iterable

我理解为什么这是错的,但我不确定如何引用我想要改变的值。

我可以做一些像:

 starred = people.loc[people["name"].str[-1] == "*"] 
 starred["name"] = starred["name"].str[:-1]

我在这里收到警告,但这种作品。问题是它只包含以前加星标的人,而不是所有人。

我对此不熟悉,如果这很简单就道歉。我觉得它不应该太难,应该有一些功能来做到这一点,但我不知道它是什么。

1 个答案:

答案 0 :(得分:0)

pd.DataFrame.loc的语法需要包含列标签:

df = pd.DataFrame({'name': ['John*', 'Rose', 'Summer', 'Mark*']})

df.loc[df['name'].str[-1] == '*', 'name'] = df['name'].str[:-1]

print(df)

     name
0    John
1    Rose
2  Summer
3    Mark

如果只指定索引器的第一部分,则只按行标签过滤并返回数据帧。您无法将系列分配给数据框。