我有一个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]
我在这里收到警告,但这种作品。问题是它只包含以前加星标的人,而不是所有人。
我对此不熟悉,如果这很简单就道歉。我觉得它不应该太难,应该有一些功能来做到这一点,但我不知道它是什么。
答案 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
如果只指定索引器的第一部分,则只按行标签过滤并返回数据帧。您无法将系列分配给数据框。